70,023
社区成员




char buff[1024]; // 需要解析的表达式
int curr; // 当前解析位置
Node* parse1();
Node* parse0()
{
Node* ret = parse1(curr);
while (buff[curr] == '+' || buff[curr] == '-')
{
根据buff[curr]生成结点x,x的左子树是ret,右结点通过调用parse1()生成。
ret = x;
}
return ret;
}
Node* parse1()
{
if (buff[curr] == '(')
{
Node* ret = parse0();
++curr;
return ret;
}
else if (buff[curr] 是字母)
{
生成一个变量结点并返回
}
return NULL; // 出错了
}
这样,生成的一定是一个二叉树,内部结点是+或-,叶子结点是变量。
从根到叶子结点的路径上会有若干个+或-,可以计算出变量前的符号。
显然,可以引入一个参数来描述这若干个+或-,不用生成语法树就可以完成解析。