我用 C 语言设计了一个能够生成 AST 的解析器,但是当我开始实现简化时,它真的搞砸了。我已经成功实施了以下汇总规则;
x + 0 -> x
x + x -> 2 * x
等等
但它需要大量的努力和代码来做到这一点。我所做的是搜索整个树并尝试找到我可以使用的模式(大量递归)然后如果有级联的 PLUS 节点,我将它们添加到列表中,然后在该列表上工作(求和数字并组合变量等)然后我从该列表中创建了另一棵树,并将其合并到现有的树中。这是我用来实现它的这篇论文。简而言之,鉴于2*x+1+1+x+0
我得到的表达3*x+2
。只是总结让我陷入了如此多的麻烦,我什至可以想象高级的东西。所以我意识到我错了。
我读过这个线程,但我真的对术语重写系统感到困惑(它到底是什么,如何在 C 中实现)。
有没有更通用和有效的方法来简化 AST?或者如何用 C 编写一个术语重写系统