ANTLR语法:parser和lexer文字

BB.*_*BB. 8 parsing antlr token lexer antlr3

这个语法有什么区别:

...
if_statement : 'if' condition 'then' statement 'else' statement 'end_if';
... 
Run Code Online (Sandbox Code Playgroud)

还有这个:

...
if_statement : IF condition THEN statement ELSE statement END_IF;
...

IF : 'if';
THEN: 'then';
ELSE: 'else';
END_IF: 'end_if';
....
Run Code Online (Sandbox Code Playgroud)

如果有任何差异,因为这会影响性能......谢谢

Bar*_*ers 9

除了Will的答案之外,最好明确定义词法分析器标记(在词法分析器语法中).如果你在解析器语法中混合使用它们,那么词法分析器将令牌标记为什么顺序并不总是很清楚.在明确定义它们时,它们总是按照它们被放入词法分析器语法(从上到下)的顺序进行标记.


Wil*_*ill 1

唯一的区别是,在您的第一个生产规则中,关键字标记是隐式定义的。隐式定义的标记与显式定义的标记没有运行时性能影响。