JavaMan писал:
как парсер может видеть это как токен?
ANTLR создает для вас токен за кулисами.
Правило:
rule1 : 'functionA' '(' expression-inside-parenthesis ')';
// parser rules ...
// lexer rules ...
эквивалентно:
rule1 : FA '(' expression-inside-parenthesis ')';
// parser rules ...
FA : 'functionA';
// lexer rules ...
В случае, если токены состоят только из 1 символа и не встречаются в других токенах, таких как '('
и ')'
, их можно определять "на лету" в правиле парсера, ставить, как только Ваша грамматика лексера также содержит идентичные идентификаторы токены. Лучше явно определить токен как 'functionA'
внутри грамматики лексера. Если вы сами определите их явно, станет яснее, в каком порядке лексер попытается токенизировать ваш ввод.
EDIT
И в случае, если вы использовали литерал-токен и определили правило лексера, которое совпадает с этим, например:
parse : 'functionA' ID;
FA : 'functionA';
ID : 'a'..'z'+;
тогда ANTLR интерпретирует правило parse
так:
parse : FA ID;