Antlr3:在词法分析器规则中使用的解析器规则中无法匹配令牌

时间:2018-07-17 10:22:55

标签: java parsing grammar antlr3 lexer

我在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正确匹配它。

1 个答案:

答案 0 :(得分:1)

在ANTLR词法分析器中,使用了可以匹配输入的最长子序列的词法分析器规则。所以你的输入

abc-abc

将被标记为

CHARS("abc")
TOKEN("-abc")

,因此将与预期的CHARS HYPHEN CHARS不匹配。

您应该考虑使TOKEN成为解析器规则,而不是词法分析器规则。