【发布时间】:2023-04-07 02:31:02
【问题描述】:
所以我正在为一个项目制作一个解析器,它要求我做一个 if 语句来检查我当前的标记是否是左关联运算符,以及该标记是否比我的堆栈顶部具有更高的优先级。我不知道如何检查优先级。
该项目最终将成为一个计算器,它接收输入并将其转换为反向波兰符号。因此,在收到输入之前,代码不会知道要检查哪些运算符。
while(is<Operator>(infixTokens.at(i)){
if(is<LAssocOperator>(infixTokens.at(i)) && infixTokens.at(i) >=tkn.top()){
//exits while loop
}
}
tkn 是一个堆栈,infixTokens 是一个向量。 >= 似乎不起作用。 检查每个元素中的哪个运算符大于另一个的最佳方法是什么?
【问题讨论】:
-
“似乎不起作用”不是一个有效的问题。除了您之外,没有人知道“tkn”是什么,也不知道您发布的小代码 sn-p 中引用的所有类和模板的定义,这对您的其余代码一无所知。
-
我确实提到过 tkn 是一个堆栈。整个代码太大而无法放入。我需要知道的是,当我不知道要检查哪些运算符时,我到底如何检查哪个运算符的优先级高于另一个运算符。
-
你显然需要知道所有的操作符是什么。然后你需要知道它们的相对优先级。一旦你有了这些信息,剩下的代码应该很明显了。
-
如果你不知道会检查哪些算子,你建议看到后如何处理?分配应指定需要哪些运算符。如果没有,请返回并获得更严格的规格。你不想完成这项工作,去找客户要求付款,并被告知,“但我们也希望它做偏导。在我们有偏导支持之前,没有钱给你!”成功项目的第一步是制定一套明确且一致同意的要求。