私が大学で受けている Compiler Principles コースの一環として、OCaml で実装されたコンパイラを作成しています。これは、Scheme コードを CISC のようなアセンブリ (単なる C マクロ) にコンパイルします。コンパイラの基本的な操作は次のとおりです。
- ファイルを読み込んでOCaml
*.scm
に変換しますstring
。 - 文字列を解析し、さまざまな分析を実行します。
- セマンティック アナライザーからの AST 出力に対してコード ジェネレーターを実行し、テキストを
*.c
ファイルに出力します。 - そのファイルを GCC でコンパイルし、ターミナルで実行します。
さて、これを除いて、すべて順調です。入力ファイルを読み込もうとしています。これは約 4000 行の長さで、基本的には Scheme if
&が混在した 1 つの巨大な式ですand
。経由でコンパイラを実行していutop
ます。入力ファイルを読み取ろうとすると、すぐにスタック オーバーフロー エラー メッセージが表示されます。ファイルが大きすぎて OCaml で処理できないというのが私の最初の推測ですが、この理論を裏付けるドキュメントを見つけることができませんでした。
助言がありますか?