I am using antlr 'org.antlr:antlr4:4.9.2'
and come across the "dangling else" ambiguity problem; see the following grammar 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 ;
I tested this grammar against the input "if a then if b then c else d"
. It is parsed as `"if a then (if b then c else d)" as expected. How does ANTLR4 resolve this ambiguity?