3

我有一个数学表达式解析器,它应该处理+, -, *, /, ^, (-), 函数,当然还有原子(例如x, 1,pi等)。解析器基本上是根据维基百科的运算符优先级解析器设计的,我在下面复制了它;parse_primary()在别处定义。

parse_expression ()
    return parse_expression_1 (parse_primary (), 0)

parse_expression_1 (lhs, min_precedence)
    while the next token is a binary operator whose precedence is >= min_precedence
        op := next token
        rhs := parse_primary ()
        while the next token is a binary operator whose precedence is greater
                 than op's, or a right-associative operator
                 whose precedence is equal to op's
            lookahead := next token
            rhs := parse_expression_1 (rhs, lookahead's precedence)
        lhs := the result of applying op with operands lhs and rhs
    return lhs

如何修改此解析器以(-)正确处理?更好的是,如何实现一个支持所有中缀和后缀运算符(!例如)的解析器?最后,函数应该如何处理?

我应该注意,(-)词法分析器中的否定与-“减法”不同,因此可以将其视为不同的标记。

4

1 回答 1

2

所有一元运算符和函数调用的东西基本上都属于 parse_primary,它应该接受一个合法的一元项。

于 2012-12-06T22:17:16.823 回答