java - 如何解析带有可变参数号的函数?

标签 java javacc

到目前为止,我的解析器能够使用这样的表达式来解析具有已知参数编号的函数

<FUNCTION><OPENPAR> son=expression() <COMMA> son1=expression() <CLOSEPAR>

此外,可选参数也可以轻松处理

<FUNCTION><OPENPAR> son=expression() <COMMA> son1=expression() [<COMMA> son2=expression()] <CLOSEPAR>

但是,我无法找到有关捕获未知数量参数的可能性的文档。我的猜测是这样的

<FUNCTION><OPENPAR> son=expression() <COMMA> son1=expression() [<COMMA> son2=expression()]+ <CLOSEPAR>

但在这种情况下,我不知道应该如何捕获这些多个参数。

有什么想法或例子吗? (或者如果有人知道这是不可能的)

最佳答案

假设至少需要一个参数。然后,您需要类似的东西:

private X myFunction():
{
  X result = new X();
}
{

  <FUNCTION>
    <OPENPAR> 
                  son=expression() { result.params.add(son); }
       (  <COMMA> son=expression() { result.params.add(son); } )*
    <CLOSEPAR>
    { return result; }
}

总而言之,我的方法是:

  1. 创建结果 Java 类 X 并像在普通 Java 中一样使用它。
  2. 从一开始就初始化所需的内容。
  3. 返回填充的对象。

如果您仍然需要工作示例,您可能会找到 this有用。

关于java - 如何解析带有可变参数号的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43932200/

相关文章:

java - httpclient放置问题

java - 如何在 JavaCC 语法中提及 try-catch block

不使用缓冲图像的带有 alpha channel 的 java 图像

java - != 和 =! 有什么区别?在 Java 中?

java - JDBC事务如何在TRANSACTION_READ_COMMITTED隔离级别锁定表?

java - 为什么 spring-data-mongodb 1.10 不支持 readConcern 选项?

JavaCC语法问题,具有理解能力

java - 如何在 Windows 10 中设置 Javacc

javacc - 第 0 行第 0 列出现词汇错误

java - 生成与双引号字符串完全匹配的过滤器机制,并包含与单引号类似的功能