小编Col*_*lin的帖子

ANTLR4词法分析器无法解决语法顺序中的歧义

使用ANTLR 4.2,我正在尝试对此测试数据进行非常简单的解析:

RRV0#ABC
Run Code Online (Sandbox Code Playgroud)

使用最小语法:

grammar Tiny;

thing : RRV N HASH ID ;

RRV : 'RRV' ;
N : [0-9]+ ;
HASH : '#' ;
ID : [a-zA-Z0-9]+ ;
WS : [\t\r\n]+ -> skip ; // match 1-or-more whitespace but discard
Run Code Online (Sandbox Code Playgroud)

根据Terence Parr的最终ANTLR 4参考文献中的摘录,我希望词法分析器RRV在ID之前匹配:

BEGIN : 'begin' ; // match b-e-g-i-n sequence; ambiguity resolves to BEGIN
ID : [a-z]+ ; // match one or more of any lowercase letter
Run Code Online (Sandbox Code Playgroud)

使用上面的测试数据运行ANTLR4测试台,输出为

[@0,0:3='RRV0',<4>,1:0]
[@1,4:4='#',<3>,1:4]
[@2,5:7='ABC',<4>,1:5]
[@3,10:9='<EOF>',<-1>,2:0]
line 1:0 mismatched input 'RRV0' expecting …
Run Code Online (Sandbox Code Playgroud)

antlr4

2
推荐指数
1
解决办法
1211
查看次数

标签 统计

antlr4 ×1