我正在尝试使用ANTLR树语法创建AST。
给出如下语法:
rule : head ':-' litlist (';' ':-' litlist)* DOT_END
我想创建一个像
这样的树 ^(RULES ^(head litlist)+)
也就是说,我希望(head litlist)
重复语法中litlist
的数量。我试过像上面这样的东西,但是我得到这样的错误:
语法错误:required(...)+ loop与输入EXPR处的任何内容都不匹配 其中EXPR是语法中的另一个术语。
基本上我想要以下内容:
a : type ID (',' ID)* ';' -> ^(type ID)+;
在Tree constructon中描述。
但是我的语法在重复子句中有多个标记,这似乎是一个问题。
这样做的正确方法是什么?
答案 0 :(得分:1)
您是否尝试过另一级别的间接?如:
rule : clauses DOT_END -> ^(RULES clauses)
clauses : head ':-' litlist (';' ':-' litlist)* -> ^(head litlist)+
可能语法还不合适。