Antlr4:防止规则和令牌冲突

时间:2018-01-16 17:13:26

标签: java antlr antlr4

给出以下语法:

grammar minimal;

rule: '(' rule_name body ')';
rule_name : NAME;
body : '(' AT NAME ')';

AT : 'at';
NAME: LETTER ANY_CHAR*;
fragment LETTER: 'a' .. 'z' | 'A' .. 'Z';
fragment ANY_CHAR: LETTER | '0' .. '9' | '-' | '_';
WHITESPACE: ( ' ' | '\t' | '\r' | '\n' )+ -> skip;

如何在没有重新排列语法的情况下匹配(at(at bar))at作为有效的函数名而不会与来自body的AT令牌发生冲突?

1 个答案:

答案 0 :(得分:2)

删除冲突并保留预期的令牌类型:

rule_name : ( NAME | AT ) -> type(NAME) ;