【问题标题】:ANTLR: Grammar Test for Optional Parameter (using ? operator)ANTLR:可选参数的语法测试(使用 ? 运算符)
【发布时间】:2009-06-11 17:59:31
【问题描述】:

我有一个 ANTLR 语法,并且正在用我的语言定义一个允许可选参数的函数。如何检查代码生成块中是否传入了可选参数?

我基本上是在寻找语法来做这个假设的树语法语句:

myFunc returns [int retval] : 'myFunc' arg1=number arg2=string?
{
    // Check if arg2 exists.
    if (/* arg2 exists */) { $retval = $arg1.value + 10; }
    else { $retval = $arg1.value; }
}

非常感谢任何关于文档的建议或指针!

【问题讨论】:

标签: code-generation antlr grammar


【解决方案1】:

您应该能够只检查 arg2 != null 是否。

【讨论】:

    【解决方案2】:

    Scott 的回答很有魅力!

    原来在if 语句中引用 ANTLR 定义的变量的方式是没有美元符号 ($),而其余时间则需要 $

    此外,要检查是否存在比简单字符串更复杂的结构,请使用

    if (arg2.tree != NULL)
    

    【讨论】:

      【解决方案3】:

      如果您希望它更通用,那么您可以让代码解析多个元素,而不是硬编码一个可选参数:

      myFunc returns [int retval] 
      : 'myFunc' funcArgs
      {
         // Here you can run through the funcArg Tree and do what
         // ever you'd like here.
      }
      
      protected
      funcArgs
      : arg (COMMA arg)*
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-01
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-02
        • 2012-11-10
        相关资源
        最近更新 更多