1

我正在尝试解析表达式,例如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(),我收到一个错误,指出发生了递归(括号使用 addSub())。我将如何处理该结构以防止递归?

4

0 回答 0