Java Xtext中的左递归问题;此规则调用是左递归调用图的一部分。”;

Java Xtext中的左递归问题;此规则调用是左递归调用图的一部分。”;,java,xtext,Java,Xtext,我已经编写了一些Xtext代码,并试图描述序言语法。现在我有一个关于左递归的问题,实际上不知道它是什么,也不知道如何解决我的问题 NotEmptyList的行导致了一些错误 PrologDsl: program=Program exquery=Exquery; Program: clause+=Clause+; Exquery: '?-' query=Query '.'; Query: predicate=Predicate (',' nthPredicate+=Predicate)*;

我已经编写了一些Xtext代码,并试图描述序言语法。现在我有一个关于左递归的问题,实际上不知道它是什么,也不知道如何解决我的问题

NotEmptyList的行导致了一些错误

PrologDsl: program=Program exquery=Exquery; 
Program: clause+=Clause+;
Exquery: '?-' query=Query '.';  
Query: predicate=Predicate (',' nthPredicate+=Predicate)*;
Clause: fact=Fact | rule=Rule;
Fact: predicate=Predicate '.';
Rule: predicate=Predicate ':-' query=Query '.';
Predicate: functor=Functor '(' term=Term (',' nthTerm+=Term)* ')';
Functor:IDENT;
Term:atom=Atom|list=List;
Atom: atom=(IDENT| VARIABLE | NUMBER);
List: emptyList = '[]' | list = NotEmptyList;
NotEmptyList: '[' folge=Folge ']' | '[' atom=Atom | term=Term ']';
Folge: atom=Atom (',' nthAtom+=Atom)* ;

terminal NUMBER:INT;
terminal VARIABLE: 'A'..'Z';
terminal IDENT: 'a'..'z'('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
我相信我必须加入一些新的规则,或者我可以简化一些东西吗

对不起,我是个差劲的初学者


提前谢谢

一个问题是Folge和带有原子的非空列表是相同的。所以你可以省略后者

List: emptyList = '[]' | list = NotEmptyList;
NotEmptyList: '[' (folge=Folge  | term=Term) ']';
类似地,您必须在语法谓词方面帮助解析器

Fact: =>(predicate=Predicate '.');
Rule: =>(predicate=Predicate ':-') query=Query '.';

谢谢你的回答。不幸的是,我还有两个错误。我在编辑器中试过:test([A | Z],Z,U):-test(Y,[B | Z],U)。这个show me-mismatched input'|'expecting']'和-mismatched input':-“expecting.”我无法深入了解。您可以使用antlrworks v3btw pipe生成调试语法并从中进行分析。pipe不是语法中的关键字。也许这就是问题所在