相关疑难解决方法(0)

ANTLR词法分析器如何消除其规则的歧义(或者为什么我的解析器会产生"不匹配的输入"错误)?

注意:这是一个自我回答的问题,旨在提供有关ANTLR用户最常犯错误之一的参考.


当我测试这个非常简单的语法时:

grammar KeyValues;

keyValueList: keyValue*;
keyValue: key=IDENTIFIER '=' value=INTEGER ';';

IDENTIFIER: [A-Za-z0-9]+;
INTEGER: [0-9]+;

WS: [ \t\r\n]+ -> skip;
Run Code Online (Sandbox Code Playgroud)

通过以下输入:

foo = 42;
Run Code Online (Sandbox Code Playgroud)

我最终得到以下运行时错误:

第1行:第6行不匹配输入'42'期望INTEGER
第1行:8输入不匹配';' 期待'='

为什么不承认ANTLR 42作为INTEGER在这种情况下?
它应该匹配模式[0-9]+就好了.

如果我颠倒了定义的顺序INTEGER并且IDENTIFIER定义它似乎有效,但为什么顺序首先重要?

parsing antlr lexer antlr4

7
推荐指数
1
解决办法
725
查看次数

标签 统计

antlr ×1

antlr4 ×1

lexer ×1

parsing ×1