ANTLR:具有相似文字的 MismatchedTokenException
我有以下
rule : A B;
A : 'a_e' | 'a';
B : '_b';
输入:
a_b //dont work
a_e_b //works
为什么词法分析器无法匹配此输入?当 ANTLR 匹配“a_b”中的“a_”时,它不应该回溯或使用前瞻或其他方式来查看它无法匹配令牌 A,然后决定将令牌 A 匹配为“a”,然后继续将令牌 B 匹配为“_b”?
我认为我误解了有关 antlr 工作原理的一些非常基本的内容。我尝试在 ANTLR 文档和谷歌中阅读它。但我对词法分析器和解析器的工作经验很少。
非常感谢您的帮助。
I have the following
rule : A B;
A : 'a_e' | 'a';
B : '_b';
Input:
a_b //dont work
a_e_b //works
Why is the lexer having trouble matching this? When ANTLR matches the 'a_' in 'a_b' shouldnt it backtrack or use lookahead or something to see it cant match a token A and then decide to match token A as 'a' and then procede to match token B as '_b'?
I think ive missunderstood something very basic about how antlr works. Ive tried to read up on it in the ANTLR doc and google. But i have little experience wokring with lexers and parsers.
Thank you very much for any help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要使用语法谓词来区分“a”、“_”、“e”和“b”。
以下内容将起作用:
这将按照您的预期解析“a_e_b”和“a_b”。
建议查看 The Definitive ANTLR Reference 的第 13 章。
You need to use a syntactic predicate to distinguish the 'a', '_', 'e' and 'b'.
The following will work:
This parses 'a_e_b' and 'a_b' as you expect.
Recommend checking chapter 13 of The Definitive ANTLR Reference.