Antlr3:无法匹配词法分析器规则中使用的解析器规则中的标记 [英] Antlr3: Could not match token in parser rules which is used in lexer rule

查看:142
本文介绍了Antlr3:无法匹配词法分析器规则中使用的解析器规则中的标记的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Antlr3中有词法规则为:

I have lexer rules in Antlr3 as:

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

If I try to match 'abc-abc' with parser_rule, It fails. Because lexer creates TOKEN for HYPHEN exp. How can I match it correctly with parser_rule.

推荐答案

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

In ANTLR lexer, the lexer rule that can match the longest sub-sequence of input is used. So your input

abc-abc

将被标记为

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

因此与预期的 CHARS HYPHEN CHARS不匹配

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

You should consider making TOKEN a parser rule instead of lexer rule.

这篇关于Antlr3:无法匹配词法分析器规则中使用的解析器规则中的标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆