XText:带有标识符的模糊语法

时间:2015-09-22 09:02:11

标签: xtext ambiguous-grammar

我遇到了一个模糊的Xtext语法问题,但我找不到正确的解决方案。

Program: (statements+=Statement)+
Statement: (AssignmentStatement | ResetStatement);
ResetStatement returns Statement:
  'RESET' (fields+=Identifier)+
;

AssignStatement returns Statement:
  target=Identifier ':=' object=Identifier
;

我得到的问题是RESET语句可能有几个字段要复位;但是,当':='如果找到了token,则解析器应该检测AssignmentStatement的开头。我尝试过使用语法谓词,但我只能消除语法歧义:

ResetStatement returns Statement:
  'RESET' =>(fields+=Identifier)+
;

但是,您可能会注意到这不是预期的行为,如:

RESET ID1 ID2
ID3 := ID1

在':='处返回错误令牌。我尝试将谓词标记添加到AssignmentStatement:

Statement: (=>AssignmentStatement | ResetStatement);

还有:

AssignStatement returns Statement:
  =>(target=Identifier ':=') object=Identifier
;

但没有成功。错误在所有情况下都是:

[fatal] rule ruleResetStatement has non-LL(*) decision due to recursive rule invocations reachable from alts 1,2.  Resolve by left-factoring or using syntactic predicates or using backtrack=true option.

我很失落所以任何提示都很受欢迎。

0 个答案:

没有答案