私は OCaml で趣味のリターゲット可能な C コンパイラに取り組んでおり、それをボトムアップで構築しています。これまでのところ、要約された注釈付きの AST タイプがあります。
type 'e expr =
| Int of 'e * int
| Var of 'e * var
| Neg of 'e * 'e expr
| Add of 'e * 'e expr * 'e expr
| Sub of 'e * 'e expr * 'e expr
および 3 つの住所コード タイプ (ここでも要約):
type node = Copy of location * location
| Unary of location * unary_op * location
| Binary of location * location * binary_op * location
and location = Temp of int | Int of int | Var of string
and unary_op = Neg
and binary_op = Add | Sub
注釈を無視してAST を TAC ノードのリストに変換する関数を作成しました。これに関して、私は2つの質問があります:
型注釈付き AST を TAC ノードのリストに変換する場合、どうすればよいですか? TAC ノードにも注釈を追加する必要がありますか? これにより、後で高レベルの
int
/char
型をI16
/のような低レベルの型に変換できますI8
。スコーピングはどのように処理すればよいですか?
Var
異なるスコープに同じ名前を持つ 2 つの がある場合はどうなりますか?