【发布时间】:2026-01-26 15:35:01
【问题描述】:
我正在创建一个包含类似于
的表达式的解析树3 - 4 * 8
或
8 * -5
或
-(10 * 1)
我需要一种方法来区分一元减号和二元减号。我的语法现在的方式是首先达到二进制减号,但我正在考虑更改它并添加一个包含最后一个变量的标志变量。
例如:如果是5 - 6
标志是 5,如果它看到减号并且标志是一个数字,则跳过一元并转到二进制。
但是我不确定如何在 C++ 中实现这一点
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
您是指在解析时区分它们的方法,还是在解析树中区分它们的方法?在解析树中,这很简单——只有单独的
UNARY_MINUS和BINARY_MINUS运算符。如果您的意思是在解析时,当您期望操作数而不是运算符时会出现一元减号。 -
在我的解析器中,我希望它能够区分 -5 和 4 -5。我的下一部分将这棵树的叶子转换为 AST 树(正在工作),但我的解析器将所有内容视为二进制减号 (4 - 5)。
标签: c++ operator-precedence unary-operator parse-tree binary-operators