我正在尝试解析我的解析器中的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())。我如何进行结构以防止递归呢?