Я пытаюсь разобрать следующую строку:ANTLR4 Вложенные режимы?
<<! variable, my_variable, A description of my variable !>>
От чтения я делал здесь, я считаю, что нужно использовать режимы различать лексер для символьной строки «переменных», то имя переменной (my_variable) и описание переменной.
Проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, как структурировать это. Можно ли встраивать режимы? Есть ли лучший/более умный способ организовать мои правила lexer?
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' ;