给定一个字符串
A + B * C / (D + E)
该算法会将字符串分解为二进制运算列表:
- 添加 D 和 E(结果 #1)
- 将 B 和 C 相乘(结果 #2)
- 将结果 #1 除以结果 #2(结果 #3)
- 将结果 #3 添加到 A
基本上,Java 等编程语言执行表达式的顺序。
解决此类问题的最佳方法是什么?
最佳答案
“最佳”方法是情人眼里出西施。一种相当常见且易于实现的方法是构建一个简单的 recursive descent parser请按照以下步骤操作:
- 编写一个方法来“标记”您的表达式(即将其转换为运算符、操作数和括号的集合,例如
"A"
、"+"
、"B"
、"*"
、"C"
、"/"
、"("
、"D"
、"+"
、"E"
、")"
- 定义一种方法,用于将顶级表达式处理为零个或多个加法或减法的序列
- 定义一种将加法或减法处理为零个或多个乘法或除法序列的方法
- 定义一种方法,将乘法或除法处理为零个或多个主表达式的序列
- 定义将主表达式处理为变量或括在括号中的顶级表达式的方法
最后一点是理解递归下降解析的关键:每当遇到左括号时,都会回调处理顶级表达式的方法,然后验证处理后的下一个标记是否是右括号。
关于java - 分解 Java 字符串中的复合算术表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27350546/