7

我正在创建一个包含类似于以下表达式的解析树

3 - 4 * 8

或者

8 * -5

或者

-(10 * 1)

我需要一种方法来区分一元和二元减号。我的语法现在的方式是首先达到二进制减号,但我正在考虑更改它并添加一个包含最后一个变量的标志变量。

例如:如果是5 - 6

该标志持有 5,如果它看到减号并且标志是一个数字,则跳过一元并转到二进制。

但是我不确定如何在 C++ 中实现这一点

任何帮助将不胜感激。

谢谢

4

1 回答 1

8

实现解析器的最简单方法是使用Recursive Descent方法。确保二进制减号的优先级高于一元减号,例如在引用的站点中:

 E -->  | E "+" E
        | E "-" E
        | "-" E
        | E "*" E
        | E "/" E
        | E "^" E
        | "(" E ")"
        | v
于 2012-05-11T18:13:15.370 回答