使用Javacc解析抽象语法树中的嵌套括号

mest 发布于 2019-03-09 expression 最后更新 2019-03-09 14:38 3 浏览

我正在尝试在我的解析器中解析诸如a*(4+5)之类的表达式来构建抽象语法树。

void addSub() : {}
{
    mulDiv() ((<ADD> mulDiv()  )| (<SUB> mulDiv() ) )*
}
void mulDiv()  : {}
{
    factor() ((<MUL> factor() )|( <DIV> factor() ))*
}
void factor() : {}
{
     (numeralLit() | booleanLit() | LOOKAHEAD(2) functionCallExp() | idUse())
     //TODO add () support
}
然而,如果我添加一个表达式如
void parantheses() :{}
{
<LPAR>
addSub()
<RPAR>
}
并把它放在factor()中,我得到一个错误,说出现了递归(parantheses使用addSub())。我将如何去结构,以防止递归?
已邀请: