在递归后代解析器中为每个规则使用void返回类型是错误的吗?

时间:2011-09-20 01:12:58

标签: algorithm recursive-descent

引自wiki

void term(void) {
    factor();
    while (sym == times || sym == slash) {
        getsym();
        factor();
    }
}

void expression(void) {
    if (sym == plus || sym == minus)
        getsym();
    term();
    while (sym == plus || sym == minus) {
        getsym();
        term();
    }
}

每个规则都使用void返回类型,

在这种情况下,如何知道特定分支是否失败或成功?

IMO,每个规则都应使用布尔返回类型来指示此分支是失败还是成功。

这是对的吗?

1 个答案:

答案 0 :(得分:0)

该示例使用一个模型,其中一个特殊的“错误”例程负责报告错误,但是如果输入表示有效输入,则肯定可以将解析器表示为返回“true”的函数,否则返回“false”。这只是两种不同的风格。