2012-02-21 49 views
0

我对编译器没有太多经验,但我终于必须编写一个。我正在使用FParsec作为解析器,现在正在使用评估器。我正在服用(我认为)是一种非常典型的方法。我有一个需要环境和AST节点的eval函数。环境是一种持久性类型,因为它因范围而异。这需要eval及其帮助者返回env * node,所有环境传递开始变得笨拙。如何跟踪编译环境

处理这个问题的标准方法是什么?我开始认为让每个范围发生变化的共享环境会更清洁,但如果可能的话,我想避免这种情况。

回答

0

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

+0

你认为这会简化编译器中的东西吗? – Daniel 2012-02-21 19:45:05

+0

我没有足够的经验尝试两种方式来获得强烈的意见。 – Brian 2012-02-21 20:12:44

+0

我认为工作流程有一些语法限制,但不记得它们是什么。 – Daniel 2012-02-21 20:32:45