我在Antlr3中有词法分析器规则:
HYPHEN : '-';
TOKEN : HYPHEN CHARS;
CHARS : 'a' ..'z';
解析器规则如下:
exp : CHARS | some complex expression;
parser_rule : exp HYPHEN exp;
如果我尝试将'abc-abc'与parser_rule匹配,它将失败。因为lexer为HYPHEN exp创建了TOKEN。如何使用parser_rule正确匹配它。
答案 0 :(得分:1)
在ANTLR词法分析器中,使用了可以匹配输入的最长子序列的词法分析器规则。所以你的输入
abc-abc
将被标记为
CHARS("abc")
TOKEN("-abc")
,因此将与预期的CHARS HYPHEN CHARS
不匹配。
您应该考虑使TOKEN
成为解析器规则,而不是词法分析器规则。