波兰表达式转换器
在中缀、前缀波兰表达式与后缀逆波兰表达式之间转换,即时获得清晰易读的结果。
转换表达式记法
输入表达式,选择源记法与目标记法。
关于波兰表达式转换
波兰记法是一种书写数学与逻辑表达式的方式,不依赖通常将运算符放在数值之间的写法。普通中缀记法将运算符放在操作数之间,例如 A + B。前缀记法将运算符放在前面,写成 + A B;后缀记法将其放在后面,写成 A B +。前缀形式通常称为波兰表达式,后缀形式则称为逆波兰表达式或 RPN。由于运算符与操作数的顺序明确,前缀与后缀表达式通常不需要括号。
本转换器支持四种常见转换:中缀转前缀、中缀转后缀、前缀转中缀、后缀转中缀。对于中缀输入,可识别标识符、十进制数、括号以及加、减、乘、除、幂运算符。采用标准优先级:先乘方,再乘除,最后加减。括号可明确改变运算顺序。幂运算采用右结合,因此 a ^ b ^ c 表示 a 的 b 的 c 次方次幂,即 a ^ (b ^ c)。
中缀转换使用调度场算法,按优先级排列标记。栈临时保存运算符,数值则直接进入输出。前缀结果随后由生成的后缀序列构建。前缀转中缀与后缀转中缀使用保存部分表达式的栈。遇到运算符时,取出对应的两个操作数,组合并加上括号,再放回栈中。最终的栈元素就是完整的中缀表达式。
前缀与后缀输入必须注意空格,因为空格用于区分每个操作数和运算符。应写成 * + A B C,而不是 *+ABC。中缀表达式可以有空格,也可以没有,因为括号与运算符字符能够分隔标记。转换器保留变量名与数值,只添加空格和括号,便于检查结果。
记法转换适用于学习表达式树、编译器解析、栈机、计算器与数据结构。后缀表达式可借助简单的栈从左向右求值,前缀表达式则可类似地从右向左处理。将熟悉的中缀公式转换为任一种形式,可以明确运算符优先级,也方便检查表达式解析练习。
波兰表达式示例
以下示例展示不同记法下的等价表达式。
| 输入 | 输出 | 转换 |
|---|---|---|
| (A + B) * C - D | - * + A B C D | 中缀转前缀 |
| A + B * C | A B C * + | 中缀转后缀 |
| * + A B - C D | ((A + B) * (C - D)) | 前缀转中缀 |
| A B + C D - * | ((A + B) * (C - D)) | 后缀转中缀 |
如何使用记法转换器
- 从四种转换类型中选择一种,指定输入记法与目标记法。
- 输入表达式;若为前缀或后缀记法,每个标记之间都须加空格。
- 选择“转换”,解析表达式并显示等价记法。
- 检查结果中的运算符顺序,或选择“重置”清空表达式后重新开始。
波兰表达式转换常见问题
什么是波兰表达式?
波兰表达式将每个运算符放在操作数之前,例如 A + B 变为 + A B。当每个运算符的操作数数量已知时,这种写法无需括号。
什么是逆波兰表达式?
逆波兰表达式将运算符放在操作数之后,例如 A + B 变为 A B +。它也称为后缀表达式,通常用栈求值。
前缀与后缀表达式需要空格吗?
需要。本转换器要求前缀或后缀标记之间使用空格,避免多字符数值或名称产生歧义。例如应写 + total 25,而不是 +total25。
转换器如何处理运算符优先级?
在中缀表达式中,幂运算优先级最高,其次是乘除,最后是加减。括号可改变这一默认顺序。
可以同时使用数字和变量名吗?
可以。操作数可为十进制数,或由字母、数字、下划线组成的标识符。转换器只重新排列标记,不计算数值。