Die EBNF-Definition eines Bezeichners lautet (a-zA-Z, _){a-zA-Z0-9, _ }
. Kann jemand diese Definition erklären und mir nach dieser Definition einen gültigen Identifikator geben?EBNF Definition des Bezeichners
0
A
Antwort
0
Die Syntax von EBNF wie Sprachen unterscheiden sich sehr. Normalerweise würde ich so etwas wie folgt definieren:
letter = "a" | "b" | ... | "z" | "A" | ... | "Z";
digit = "0" | "1" | "2" | ... | "9";
identifier = letter , { letter | digit | "_" } ;
Ihre Form sieht aus wie eine Mischung aus EBNF und regex. Es ist schwer zu sagen, was das bedeutet, wenn ich nicht weiß, von welcher Sprache wir sprechen.
Aber durch reines Raten würde ich sagen, dass es eine C-ähnliche Kennung (z. B. Variablenname) wie "myVar_0123ab" beschreibt. Der Bezeichner muss mit einem Buchstaben oder einer Unterstreichung "_" beginnen, gefolgt von Buchstaben, Unterstreichungen und Ziffern.
Das bedeutet nur, dass es mit einem Alphabet oder einem Unterstrich beginnen muss, gefolgt von einer beliebigen Anzahl von alphanumerischen Zeichen und Unterstrichen. '_' ist gültig, '_a_var' ist gültig,' _____ 'ist auch gültig,' aVar_' ist ebenfalls gültig, '9_var' ist nicht – Alex
@Alex danke, hab die Erklärung bekommen. Diese Zeichenkette _4H_2 ist auch gültig –
Aus den gegebenen Informationen kann man streng genommen nichts sagen. Die Regel verwendet 3 undefinierte Nicht-Terminals ('a-zA-Z',' _', 'a-zA-Z0-9') (siehe ISO 14977 - der Standard [EBNF] (https: //en.wikipedia. org/wiki/Extended_Backus% E2% 80% 93Naur_Form)). Außerdem geben die Kommas die Reihenfolge, die Klammergruppierung und das wiederholbare Klammermaterial an. Unter der Annahme, dass die Nicht-Terminals in der Regex-Notation zu '[a-zA-Z]' und '[a-zA-Z0-9] 'expandieren, beginnen die Bezeichner mit einem Buchstaben und einem Unterstrich und werden mit alternierenden alphanumerischen Zeichen und Unterstrichen fortgesetzt . Somit sind 'a_' und' a_A_' gültig; 'a' und' _2_' sind nicht. –