Caj*_*uke 6 parameters antlr function antlr3
我有一个语法,我想在(像f(x,y)
)中包含多参数函数.我正在使用AST输出和我自己的树解析器.现在我的参数列表生产是
paramdefs: (ID COMMA)* ID ;
Run Code Online (Sandbox Code Playgroud)
这工作正常,但AST输出
z(x,y)=expression
Run Code Online (Sandbox Code Playgroud)
是
(FUNC (z)(x)(,)(y)(expression))
Run Code Online (Sandbox Code Playgroud)
(即它很平坦).
该FUNC
CommonTree的孩子,在一般情况下,都是{ function name
,parameter
,comma
,parameter
,defined expression
},对于任何数量的参数.我希望参数列表是一个单独的子项而不是逗号(这样可以更容易地遍历树).
理想情况下,这就是树的样子:
(FUNC (z)((x)(y))(expression))
Run Code Online (Sandbox Code Playgroud)
(注意没有逗号元件的和的分组x
和y
.
语法的相关相关领域:
funcdef: ID '(' paramdefs ')' '=' expr -> ^(FUNC ID paramdefs expr) ;
paramdefs: (ID COMMA)* ID ;
Run Code Online (Sandbox Code Playgroud)
要创建这样的树:
输入z(x,y)=expr
,请执行以下操作:
grammar ...
...
tokens {
FUNC;
PARAMS;
}
...
funcdef
: ID '(' paramdefs ')' '=' expr -> ^(FUNC ID paramdefs expr)
;
paramdefs
: (ID COMMA)* ID -> ^(PARAMS ID+)
;
Run Code Online (Sandbox Code Playgroud)