【问题标题】:What do parenthesis mean in JavaCC?JavaCC 中的括号是什么意思?
【发布时间】:2018-10-28 17:36:27
【问题描述】:

假设我有:

void ProdRule() : {}
{
    (NonTerminal() OtherNonTerminal())
}

括号里是什么意思:

(NonTerminal() OtherNonTerminal())

是什么意思?

【问题讨论】:

  • 文档中没有详细说明吗?

标签: java recursion compiler-construction javacc


【解决方案1】:

与数学表达式或普通编程语言一样,括号可用于将子表达式组合在一起,这与使用普通运算符优先级得到的不同。

例如,如果你有这个:

A() B() | C()

这意味着“'A 后跟 B' 或 C”,而这个:

A() (B() | C())

改为表示“A 后跟 'B 或 C'”。

括号也需要使用后缀运算符,例如*+?,并确定这些运算符适用于语法的哪些部分。比如:

A() (B())*

表示“一个 A,后跟零个或多个 B”,而这个:

(A() B())*

意思是“'A 后跟 B' 出现零次或多次”。

在您的示例中,括号根本没有任何作用,可以删除。

【讨论】:

  • 您认为此处不适合提供文档链接吗?
  • 文档在此处javacc.org/javaccgrm#prod16。它没有具体说明后面没有+?* 的括号的含义(或者说缺乏含义)。
猜你喜欢
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 2012-03-30
  • 2021-11-26
  • 2020-01-12
相关资源
最近更新 更多