【发布时间】:2020-09-18 03:28:29
【问题描述】:
我正在尝试为特定领域的语言编写编译器,目标是基于堆栈机器的 VM,而不是 JVM。
我已经为我的语言生成了一个解析器,并且可以很容易地生成一个我可以轻松理解的 AST。我也没有问题将我的语言的许多语句转换为该 VM 的适当指令,但是在遇到复杂条件时处理生成适当分支指令的问题时遇到了障碍,尤其是当它们与(可能嵌套)类似“and”或类似“or”的操作相结合,这些操作应在适用时使用短路分支。
我没有要求任何人为我写这篇文章。我知道我还没有开始足够详细地描述我的问题。我要的是指向有用的材料的指针,这些材料可以让我克服我面临的这个障碍。正如我所说,我已经超过了将我的语言中大约 90% 的语句转换为适用指令的地步,但让我难过的是条件处理和生成适当的流控制指令。到目前为止,我能够找到的关于从 AST 生成代码的大部分信息似乎只处理与简单的命令式语句相对应的代码生成,但条件和流程控制的处理似乎更加稀缺.
除了我已经描述的“and”和“or”之类的构造的短路/延迟评估机制之外,我不关心处理任何其他优化。
【问题讨论】:
-
关于资源,你可以看看 Crafting Interpreters,特别是 Jumping Back and Forth 章节。
标签: if-statement compiler-construction code-generation abstract-syntax-tree lazy-evaluation