我对编译器没有多少经验,但我最后还是要编写一个。我使用FParsec作为解析器,现在正在使用评估器。我采取(我认为)这是一种非常典型的方法。我有一个eval
函数,它接受一个环境和一个AST节点。环境是持久性类型,因为它因范围而异。这需要eval
并且它的帮助者返回env * node
并且所有环境传递开始变得笨拙。
处理此问题的标准方法是什么?我开始认为拥有一个由每个范围变异的共享环境会更干净,但我想尽可能避免这种情况。
答案 0 :(得分:0)
你可以使用状态monad作为使用副作用的替代方法,以避免大多数句法管道。