【问题标题】: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' 出现零次或多次”。
在您的示例中,括号根本没有任何作用,可以删除。