我正在为一种实验语言编写解释器。该语言的三个主要结构是定义、语句和表达式。定义可以包含语句和表达式,语句可以包含定义和表达式,一种表达式可以包含语句。我使用联合类型来表示所有这些,因此我可以轻松地对它们使用模式匹配。理想情况下,我想将这些代码放在不同的文件中,但 OMake 抱怨循环依赖问题。据我所知,不允许跨模块进行循环类型定义。
我知道解决这个问题的唯一方法是一次定义所有三种类型:
type defn = ...
and stmt = ...
and expr = ...
似乎这要求类型的所有代码都在同一个文件中。有没有办法解决?您如何处理代码中的循环定义?