Aus MSDN MS-VBAL-Lexikalischen Regeln
Denken Sie auch daran, dass Variablen- und Konstantennamen in einem kompilierten Programm nicht vorhanden sind.
3.2.1 Grammatik der physischen Linien
module-body-physical-structure = *source-line [non-terminated-line] source-line = *non-line-termination-character line-terminator non-terminated-line = *non-line-termination-character line-terminator = (%x000D %x000A) / %x000D / %x000A / %x2028 / %x2029 non-line-termination-character = <any character other than %x000D / %x000A / %x2028 / %x2029>
Eine Implementierung kann die Anzahl der Zeichen begrenzen, die in einer physischen Zeile zulässig sind. Die Bedeutung eines Moduls, das physikalische Zeilen enthält, die eine solche Implementierungsgrenze überschreiten, ist in dieser Spezifikation nicht definiert. Wenn eine <Modulkörper-physische-Struktur> mit einer <nicht terminierten Zeile> abschließt, KANN eine Implementierung das Modul so behandeln, als würde auf die <nicht terminierte Zeile> unmittelbar ein <Zeilenabschlusszeichen> folgen.
Zur Interpretation als VBA-Programmtext wird ein Modulkörper (Abschnitt 4.2) als ein Satz logischer Zeilen betrachtet, von denen jede mehreren physischen Zeilen entsprechen kann. Diese Struktur wird durch die logische Liniengrammatik beschrieben. Die Terminalsymbole dieser Grammatik sind Unicode-Zeichen-Codepunkte.
3.2.2 Logische Liniengrammatik
module-body-logical-structure = *extended-line extended-line = *(line-continuation / non-line-termination-character) line-terminator line-continuation = *WSC underscore *WSC line-terminator WSC = (tab-character / eom-character /space-character / DBCS-whitespace / most-Unicode-class-Zs) tab-character = %x0009 eom-character = %x0019 space-character = %x0020 underscore = %x005F DBCS-whitespace = %x3000 most-Unicode-class-Zs = <all members of Unicode class Zs which are not CP2-characters>
Eine Implementierung kann die Anzahl der Zeichen in einer <erweiterten Zeile> begrenzen. Zur Vereinfachung der Spezifikation ist es zweckmäßig, sich explizit auf den Punkt beziehen zu können, der unmittelbar vor dem Beginn einer logischen Zeile und dem Punkt unmittelbar vor dem letzten Zeilenende einer logischen Zeile steht. Dies wird mit <LINE-START> und <LINE-END> als Terminalsymbol der VBA-Grammatiken erreicht. Ein <LINE-START> ist so definiert, dass er unmittelbar vor jeder logischen Zeile steht, und ein <LINE-END> wird als das Ersetzen des <Zeilenabschlusses> am Ende jeder logischen Zeile definiert:
module-body-lines = *logical-line logical-line = LINE-START *extended-line LINE-END
Bei Verwendung in einer ABNF-Regeldefinition werden mit <LINE-START> und <LINE-END> der erforderliche Anfang oder das Ende einer <logischen Zeile> angegeben.
3.3 Lexikalische Token
Die Syntax von VBA-Programmen lässt sich am einfachsten anhand von lexikalischen Token und nicht anhand einzelner Unicode-Zeichen beschreiben. Insbesondere ist das Auftreten von Leerzeichen oder Zeilenfortsetzungen zwischen den meisten syntaktischen Elementen für die syntaktische Grammatik in der Regel irrelevant. Die syntaktische Grammatik wird wesentlich vereinfacht, wenn sie solche möglichen Whitespace-Vorkommnisse nicht beschreiben muss. Dies wird erreicht, indem lexikalische Token (auch einfach als Token bezeichnet) verwendet werden, die Leerzeichen als terminale Symbole der syntaktischen Grammatik abstrahieren. Die lexikalische Grammatik definiert die Interpretation einer <Modulkörperlinien> als eine Menge solcher lexikalischer Token.
Die Terminalelemente der lexikalischen Grammatik sind Unicode-Zeichen und die Elemente <LINE-START> und <LINE-END>. Im Allgemeinen ist jeder Regelname der lexikalischen Grammatik, der in Großbuchstaben geschrieben wird, auch ein lexikalisches Token und ein terminales Element der VBA-Syntaxgrammatik. Von ABNF zitierte wörtliche Textregeln gelten auch als lexikalische Token der syntaktischen Grammatik. Lexikalische Token umfassen alle Leerzeichen, die unmittelbar vor ihnen stehen. Beachten Sie, dass bei der Verwendung in der lexikalischen Grammatik zitierte Regeln für literalen Text nicht als Token behandelt werden. Daher sind alle vorangestellten Whitespace-Zeichen von Bedeutung.
3.3.1 Separator- und Spezial-Token
WS = 1*(WSC / line-continuation) special-token = "," / "." / "!" / "#" / "&" / "(" / ")" / "*" / "+" / "-" / "/" / ":" / ";" / "<" / "=" / ">" / "?" / "\" / "^" NO-WS = <no whitespace characters allowed here> NO-LINE-CONTINUATION = <a line-continuation is not allowed here> EOL = [WS] LINE-END / single-quote comment-body EOS = *(EOL / ":") ;End Of Statement single-quote = %x0027 ; ' comment-body = *(line-continuation / non-line-termination-character) LINE-END
<special-token> wird verwendet, um einzelne Zeichen zu identifizieren, die in der Syntax von VBA-Programmen eine besondere Bedeutung haben. Da es sich um lexikalische Token (Abschnitt 3.3) handelt, können diesen Zeichen Leerzeichen vorangestellt werden, die ignoriert werden. Jedes Vorkommen eines der zitierten <special-token> -Elemente als Grammatikelement innerhalb der syntaktischen Grammatik ist ein Verweis auf das entsprechende Token (Abschnitt 3.3).
<NO-WS> wird als terminales Element der syntaktischen Grammatik verwendet, um anzuzeigen, dass dem Token, das unmittelbar folgt, keine Leerzeichen vorangestellt werden dürfen. <NO-LINE-CONTINUATION> wird als terminales Element der syntaktischen Grammatik verwendet, um anzuzeigen, dass dem Token, das unmittelbar darauf folgt, kein Leerzeichen vorangestellt werden darf, das beliebige <Zeilenfortsetzungssequenzen> enthält.
<WS> wird als terminales Element der syntaktischen Grammatik verwendet, um anzuzeigen, dass dem unmittelbar darauf folgenden Token ein oder mehrere Leerzeichen vorangestellt sein müssen.
<EOL> wird als Element der syntaktischen Grammatik verwendet, um das Token zu benennen, das als "Ende der Anweisung" -Markierung für Anweisungen fungiert, die die einzige oder letzte Anweisung in einer logischen Zeile sein müssen.
<EOS> wird als terminales Element der syntaktischen Grammatik verwendet, um das Token zu benennen, das als "Ende der Anweisung" -Markierung fungiert. Im Allgemeinen ist das Ende der Anweisung entweder durch ein <LINE-END> oder ein Doppelpunkt gekennzeichnet. Alle Zeichen zwischen einem <einfachen Anführungszeichen> und einem <LINE-END> sind Kommentartext, der ignoriert wird.