我有一个语法,我想在其中包含多参数函数(例如 f(x,y)
)。我在我自己的树解析器中使用 AST 输出。现在我的参数列表生产是
paramdefs: (ID COMMA)* ID ;
这工作正常,但 AST 输出
z(x,y)=expression
是
(FUNC (z)(x)(,)(y)(expression))
(即它非常平坦)。
FUNC
在一般情况下,CommonTree 的 child 是 { function name
, parameter
, comma
, parameter
, defined expression
},对于任意数量的参数。我希望参数列表是一个单独的子项并且没有逗号(这将使遍历树更容易)。理想情况下,这就是树的样子:
(FUNC (z)((x)(y))(expression))
(注意逗号元素的缺失以及
x
和 y
的分组。语法的相关相关领域:
funcdef: ID '(' paramdefs ')' '=' expr -> ^(FUNC ID paramdefs expr) ;
paramdefs: (ID COMMA)* ID ;
最佳答案
要创建这样的树:
对于输入 z(x,y)=expr
, 请执行下列操作:
grammar ...
...
tokens {
FUNC;
PARAMS;
}
...
funcdef
: ID '(' paramdefs ')' '=' expr -> ^(FUNC ID paramdefs expr)
;
paramdefs
: (ID COMMA)* ID -> ^(PARAMS ID+)
;
关于function - 用于定义/调用多参数函数的 ANTLR 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6644800/