作为我在大学学习的编译器原理课程的一部分,我们正在编写一个在 OCaml 中实现的编译器,它将 Scheme 代码编译成类似 CISC 的程序集(只是 C 宏)。编译器的基本操作是这样的:
- 读取
*.scm
文件并将其转换为 OCamlstring
。 - 解析字符串并执行各种分析。
- 在语义分析器的 AST 输出上运行代码生成器,将文本输出到
*.c
文件中。 - 使用 GCC 编译该文件并在终端中运行它。
好吧,一切都很好,除了这个:我正在尝试读取一个输入文件,它大约有 4000 行长,基本上是一个混合了 Scheme if
&的巨大表达式and
。我正在通过utop
. 当我尝试读取输入文件时,我立即收到堆栈溢出错误消息。我最初的猜测是该文件对于 OCaml 来说太大了,无法处理,但我找不到任何支持该理论的文档。
有什么建议么?