夏のプロジェクトとして言語とそのコンパイラを書くことを検討していますが、解析ツリーまたは BNF/EBNF を使用してコンパイラをプログラムする方法に関する情報を見つけるのに苦労しています。全体的な目標は、単純化された関数型言語の構文を解析して c に変換するコンパイラを作成することです。私は現在、このコンパイラを C 言語で書くことを計画していますが、誰かがそれがより良いアイデアであると信じているなら、他の何かでそれを行うことを気にしません. (ただし、LEX などのツールを使用せずに手動でこれを行いたいと思います)
たとえば、言語を作成し、そのADD
構文を として定義した場合(+ 3 4)
、その EBNF を簡単に生成できます。
Program -> {Function}
Function -> Operator Integer Integer
Operator -> +
Integer -> Digit {Digit}
Digit -> 0|1|2|3|4|5|6|7|8|9
解析ツリーを作成するのはさらに簡単です。
Function
|
-------------------
| | |
Operator Integer Integer
しかし、どのようにしますか:
- C で EBNF または解析ツリーを表す
- このデータを使用して有効な C コードを取得します
非常に単純な実際の例を見ることができれば、正しい方向に進むのに十分だと思います。(コンパイラの標準リソースのようです)を読むことをお勧めする方が多いと思いますDragon Book
ので、既に注文して出荷されていることをお知らせしたいと思います。
あなたがこれに当てることができる光を前もってありがとう!
-バイキング羊飼い