【发布时间】:2016-11-01 02:16:37
【问题描述】:
这是我的 ANTLR4 语法片段:
词法分析器规则:
AND : ('a'|'A') ('n'|'N') ('d'|'D');
OR : ('o'|'O') ('r'|'R') ;
NOT : ('n'|'N') ('o'|'O') ('t'|'T') ;
TERM : ('a'..'z'|'A'..'Z'|'0'..'9'|[1-9])+ ;
解析器规则:
negation: NOT;
logical: AND|OR;
term: TERM;
search
: negation? term (logical negation? term)* ;
;
基本上我试图让它解析 "you and me" 字符串,以便 TERM 令牌匹配 "you", "me" 我希望 "and" 能够被 AND 规则识别,而不是 TERM 规则。
现在我得到:line 1:4 missing TERM at 'and' 错误。
我知道我的输入同时被 AND 和 TERM 词法分析器规则匹配,但我希望能够指定 TERM 是任何东西除了匹配 AND 规则的东西。
【问题讨论】:
-
当您在 antlr 中有这种非常典型的关键字/标识符公共前缀歧义时,您应该考虑使用“文字”功能。 (见antlr2.org/doc/options.html#literal)
-
看起来你需要添加一个空格规则。