如何跟踪编译环境

时间:2012-02-21 19:32:13

标签: compiler-construction f#

我对编译器没有多少经验,但我最后还是要编写一个。我使用FParsec作为解析器,现在正在使用评估器。我采取(我认为)这是一种非常典型的方法。我有一个eval函数,它接受一个环境和一个AST节点。环境是持久性类型,因为它因范围而异。这需要eval并且它的帮助者返回env * node并且所有环境传递开始变得笨拙。

处理此问题的标准方法是什么?我开始认为拥有一个由每个范围变异的共享环境会更干净,但我想尽可能避免这种情况。

1 个答案:

答案 0 :(得分:0)

你可以使用状态monad作为使用副作用的替代方法,以避免大多数句法管道。