验证数学公式 C++
Verify Mathematical Equation c++
我目前正在尝试构建一个非常简单的编译器。 我创建了一个函数,该函数使用分流场算法将中缀符号中的数学方程转换为 RPN,但是我遇到了一个问题。 我没有在我的转换函数中包含错误检查,所以我想知道是否有一种简单的方法来检查中缀表示法中的函数是否采用正确的中缀表示法语法。 这将使我能够保留当前的转换函数,而不会因错误检查而掩盖它。
如果您的表达式仅由括号、值(常量和/或标识符)以及前缀、后缀和中缀运算符组成,则需要检查两个错误条件:
-
括号必须匹配。使用调车场算法很难不注意到这一点,因为算法中有一个点,当输入中遇到右括号时,会从堆栈中弹出一个左括号。如果过度弹出堆栈,或者没有在输入结束时弹出整个堆栈,则括号不会平衡。
-
令牌必须符合以下简单正则表达式:
PRE* VAL POST* ( INFIX PRE* VAL POST* )*
哪里
-
PRE
是前缀运算符或 ( -
POST
是后缀运算符或 ) -
VAL
是一个值:常量或标识符
-
这实际上简化为一个双状态状态机:初始状态(状态 0)可以称为"期望值",另一个状态(状态 1)可以称为"期望运算符"。只有状态 1 接受,转换如下所示:
State 0:
PRE → State 0
VAL → State 1
State 1:
POST → State 1
INFIX → State 0
所有其他转换都是错误。
为了正确处理一元减号(以及其他可能是前缀或中缀的运算符),通常需要实现此状态机,并且在任何情况下,集成到输入处理中都非常简单。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- CUDA内核和数学函数的显式命名空间
- 如果没有数学库,我如何在C++中创建复利公式
- C++在数学计算中将double转换为int
- 输出 0 和 -0 的二次公式,与给定的项无关
- 如何在两个 boost::multi_arrays (C++) 之间执行数学运算?
- 需要反转音频步进公式
- 使用浮点数和双精度数的非常小数字的数学
- 标准偏差 c++ 公式建议
- 此代码验证公式是什么意思?
- 等效于按位运算的数学公式
- 数学 - 公式v [i] =([V [i-1] * v [i-1] /(i 2)] v [i-1] * i
- 如何在 c++ 中从字符串中解析数学公式
- 实现数学公式时出现溢出问题
- 验证数学公式 C++
- C++嵌入数学公式
- 安全的数学优化,同样的公式在不同的行上,不同的结果
- 从外部输入文件将字符串数学公式以double形式读入cpp
- 实际的数学公式涉及C++代码