用于定义/调用多参数函数的ANTLR语法

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)

(即它很平坦).

FUNCCommonTree的孩子,在一般情况下,都是{ function name,parameter,comma,parameter,defined expression},对于任何数量的参数.我希望参数列表是一个单独的子项而不是逗号(这样可以更容易地遍历树).

理想情况下,这就是树的样子:

(FUNC (z)((x)(y))(expression))
Run Code Online (Sandbox Code Playgroud)

(注意没有逗号元件的和的分组xy.

语法的相关相关领域:

funcdef: ID  '(' paramdefs ')' '=' expr -> ^(FUNC ID paramdefs expr) ;

paramdefs: (ID COMMA)* ID ;
Run Code Online (Sandbox Code Playgroud)

Bar*_*ers 9

要创建这样的树:

在此输入图像描述

输入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)