Antlr AST树构造

时间:2015-03-14 09:06:36

标签: java tree antlr grammar antlr3

我正在尝试使用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中描述。

但是我的语法在重复子句中有多个标记,这似乎是一个问题。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您是否尝试过另一级别的间接?如:

rule    : clauses DOT_END ->  ^(RULES clauses)
clauses : head ':-' litlist (';' ':-' litlist)* -> ^(head litlist)+

可能语法还不合适。