我正在编写一个编译器,将JavaCC转换为ANTLR4,其中一个规则涉及传递参数并从中获取返回值。
对于规则'term',我必须执行以下操作:
Term term(ReadOptions options, int priority):
{
int p = options.operatorSet.getNextLevel(priority);
Term t;
}
{
(
LOOKAHEAD({p==0})
t = simpleTerm(options)
|
LOOKAHEAD(<NAME_TOKEN>,{priority==1201 && is1201Separator(2)})
t = name()
|
t = operatorTerm(options, p)
)
{return t;}
}
问题是我如何根据'p'的值匹配子规则。在先前版本的ANTLR中我可以使用=&gt;我的问题会解决,但我在ANTLR4做什么?
答案 0 :(得分:5)
在ANTLR 4中不再需要以前版本的ANTLR中的=>
运算符。
(x) => y
,则可以在ANTLR 4中使用y
。{x}? => y
,那么在ANTLR 4中您只需使用{x}? y