我正在尝试解析ANTLRWorks2中的一种语言:
grammar testLR;
pb: 'kind' '=' ID ';' pb
| fd pb
|
;
fd: ( 'instance' '=' ID ';' )*
;
ID: ('a'..'z'|'A'..'Z'|'_'|'$') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'$')*
;
然后ANTLRWork告诉我:“以下几组规则是相互左递归的[pb]”。我只是无法弄清楚如何解决问题。 欢迎任何建议。谢谢!
答案 0 :(得分:3)
由于你的fd规则有一个*表示它可以是空的(* = 0或更多次) - 拥有一个空的fd意味着你的pb规则(第二行)将是一个pb:pb,这是不允许的解析器将永远循环。您可以通过不允许fd规则为空(将*更改为+)来修复此问题,但我不知道您的语法是否需要这样做。