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

标签 function parameters antlr antlr3

我有一个语法,我想在其中包含多参数函数(例如 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))

(注意逗号元素的缺失以及 xy 的分组。

语法的相关相关领域:
funcdef: ID  '(' paramdefs ')' '=' expr -> ^(FUNC ID paramdefs expr) ;

paramdefs: (ID COMMA)* ID ;

最佳答案

要创建这样的树:

enter image description here

对于输入 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/

相关文章:

r - 如何将 dplyr `filter` 字符向量作为函数的一部分传递

unicode - 如何在Antlr中匹配Unicode字符

parsing - ANTLR词法分析器如何消除其规则的歧义(或者为什么我的解析器会产生 "mismatched input"错误)?

excel - 为什么 "bCheck"总是返回 "True"?

c++ - 我应该避免在这里使用 goto 吗?如果是这样,怎么做?

c++ - 检查 bool 是否比调用空函数更有效?

java - 在 JSP 中将 Javascript 值传递给 Java

C# 4.0,可选参数和 params 不能一起工作

c - 具有最小参数的可变参数函数

java - 没有方法program()来构建解析树对象