我正在尝试解析表达式,例如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())。我将如何处理该结构以防止递归?