1

我正在使用antlr 'org.antlr:antlr4:4.9.2'并遇到“悬空的其他”歧义问题;请参阅以下语法IfStat.g4

// file: IfStat.g4
grammar IfStat;

stat : 'if' expr 'then' stat
     | 'if' expr 'then' stat 'else' stat
     | expr
     ;

expr : ID ;

ID : LETTER (LETTER | [0-9])* ;
fragment LETTER : [a-zA-Z] ;

WS  : [ \t\n\r]+ -> skip ;

我针对输入测试了这个语法"if a then if b then c else d"。正如预期的那样,它被解析为“if a then (if b then c else d)”。ANTLR4 如何解决这种歧义?

4

1 回答 1

1

ANTLR 将选择它能够创建的第一个可能的(成功的)路径。

您可以启用 ANTLR 以报告语法中的此类歧义。检查此问答:ANTLR未报告语法歧义

于 2021-11-25T11:03:39.443 回答