我正在尝试使用ANTLR树语法创建AST。
给出如下语法:
rule : head ':-' litlist (';' ':-' litlist)* DOT_END
我想创建一个像下面的树
^(RULES ^(head litlist)+)
也就是说,我希望
(head litlist)
在语法中重复与litlist
一样多的数目。我尝试了类似上面的操作,但是出现了这样的错误:语法错误:必填(...)+循环与输入EXPR上的内容不匹配
其中EXPR是语法中的另一个术语。
基本上我想要类似以下内容:
a : type ID (',' ID)* ';' -> ^(type ID)+;
Tree constructon中有描述。
但是我的语法在重复子句中有多个标记,这似乎是一个问题。
什么是正确的方法?
最佳答案
您是否尝试过另一种间接方式?如:
rule : clauses DOT_END -> ^(RULES clauses)
clauses : head ':-' litlist (';' ':-' litlist)* -> ^(head litlist)+
语法可能还不正确。