3

我正在尝试在 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]”。我只是不知道如何解决这个问题。欢迎任何建议。谢谢!

4

1 回答 1

3

由于您的 fd 规则有一个 * 这意味着它可以为空(* = 0 次或更多次) - 有一个空 fd 意味着您的 pb 规则(第二行)将是一个 pb : pb,这是不允许的,因为解析器会永远循环下去。您可以通过不允许 fd 规则为空(将 * 更改为 +)来解决此问题,但我不知道您的语法是否需要这样做。

于 2013-08-28T19:13:21.437 回答