我正在尝试重新排序'/'操作数,使其首先出现
所以(1 + y) / (1 + 2z)^2
转换为
/(1+y)(1+2z)^2
此代码实现了这一点:
object ast extends App {
val s: List[String] = "1 + y / 1 + 2z ^2".split(" ").toList;
val removeOperatorsToBeReordered : List[String] = {
s.filter(f => !f.contains("/"))
}
"/" :: removeOperatorsToBeReordered foreach(println)
}
但这是一个简单的测试用例,并不适合(1 + x)/(1 + y)/(1 + 2z)^ 2,因为使用("/" :: removeOperatorsToBeReordered)
显式添加'/'
(1 + x) / (1 + y) / (1 + 2z)^2
应生成/ (1 + x) (/(1 + y) / (1 + 2z))^2
我是否需要某种形式的ast:
val generateAST = {
case class Node(operand: String, leftOperator: String, rightOperator: String)
}
答案 0 :(得分:0)
您可以将字符串解析为节点的语法树。
看看scala parser combinators。您可以定义自己的解析器并将它们组合以生成节点的嵌套结构,然后处理嵌套结构。
好像你想要解析字符串以打磨表示法。 Here是反向抛光表示法解析器的一个示例。