Ich versuche, die folgende Zeichenfolge zu analysieren:ANTLR4 Verschachtelte Modi?
<<! variable, my_variable, A description of my variable !>>
Aus der Lektüre hat mich hier getan, ich glaube, ich brauche Modi zu verwenden, um zwischen der Lexer für die Zeichenkette ‚Variable‘ zu unterscheiden, die Variablenname (my_variable) und die Beschreibung der Variablen.
Das Problem, das ich habe, ist, dass ich nicht sicher bin, wie man das strukturiert. Ist es möglich, Modi zu verschachteln? Gibt es eine bessere/intelligentere Möglichkeit, meine Lexer-Regeln zu organisieren?
lexer grammar VariableLexer;
variableMarkdown : DELIMITER_OPEN SPACE VARIABLE COMMA SPACE variable_name COMMA SPACE description SPACE DELIMITER_CLOSE;
description : WORDS ;
variable_name : ID ;
DELIMITER_OPEN : '<<!' ;
DELIMITER_CLOSE : '!>>';
COMMA : ',' ;
SPACE : ' ' ;
VARIABLE : 'variable' -> pushMode(VariableName);
mode VariableName;
ID : LOWERCASE (LOWERCASE | NUMBER | UNDERSCORE)* -> pushMode(VariableDescription) ;
mode VariableDescription;
WORDS : (UPPERCASE | LOWERCASE | NUMBER | SPACE)+ -> popMode;
fragment LOWERCASE : 'a'..'z' ;
fragment UPPERCASE : 'A'..'Z' ;
fragment UNDERSCORE : '_' ;
fragment NUMBER : '0'..'9' ;