假设我有一个字符串公式,它是这样写的:“func(a+B,c)",其中func是自定义函数,该字符串包含中缀(即,+)和前缀(即,func)表示,我想把它转换成一个字符串,所有的前缀表示,“func(+(a,B),c)",我怎么做呢?
另一个例子是“func 1(a*(B+c),d)-func 2(e,f)”到“-(func 1((a,+(B,c)),d),func 2(e,f))”
更多背景:我想建立一个解析器,在那里用户将输入字符串格式的表达式,就像上面描述的那样,通常一个自定义函数将被写为前缀表达式,即。“func(a,B)",但由于共同的约定,人们仍然会将+-/写在中缀表达式中,即“a+B”
如果一个表达式是以全中缀格式给出的,我可以很容易地将其转换为我预定义的树对象,但是如果一个表达式同时包含前缀和中缀格式,我不知道如何将其转换为树对象,因此需要询问如何将字符串转换为全中缀格式。
我没有使用解析器的经验,感谢任何初始指导。
1条答案
按热度按时间tvmytwxo1#
如果您解析的语言与Python类似,则可以使用内置的ast模块提供的Python解析器,并在您感兴趣的节点上实现访问者,以构建前缀表达式。例如,您可以尝试以下操作:
执行: