2019-01-01から1年間の記事一覧
低レイヤを知りたい人のためのCコンパイラ作成入門 ステップ11-15を参考にしています。 前回 (5) 識別子を、[a-z] から [a-zA-Z_][a-zA-Z0-9_]* に拡張 参考: ステップ11 コード差分 ローカル変数をスタックフレーム内にどう割り当てるか、パース時に保存し…
低レイヤを知りたい人のためのCコンパイラ作成入門 ステップ9-10を参考にしています。 前回 (4) 次回 (6) 仮完結編 ローカル変数 変数を使うには、代入 a = 1 とそれを使った計算 a + 1 などができないと話にならないので、先に文法に 文はセミコロンで終端…
低レイヤを知りたい人のためのCコンパイラ作成入門 ステップ5-6を参考にしています。 前回 (3) 次回 (5) 単項 +, - 演算子 結合順として乗算 * と項 (...) の間に、単項演算子を入れる。生成規則 unary := term | "+" term | "-" term として、構文解析のロ…
低レイヤを知りたい人のためのCコンパイラ作成入門 ステップ4を参考にしています。 前回 (2) 次回 (4) 構文木の導入 1+2*3 を 1+(2*3) として計算するためには、トークンを左から消費していくだけではいけない。 加減算と乗除算の生成規則を階層立てて定義し…
低レイヤを知りたい人のためのCコンパイラ作成入門 ステップ1-3を参考にしています。 前回 (1) 次回 (3) 整数1つからなる言語 前回の、整数1つを a0 レジスタに入れて OS に返すアセンブリをもとにする。 ソースコード(ここではコマンドライン引数)として…
純粋にコンパイラの構成に興味が出てきたので挑戦。 低レイヤを知りたい人のためのCコンパイラ作成入門 を参考にしてみようと思う。 ターゲットはせっかくなので RISC-V (64bit)。 環境構築 Ubuntu 18.04 先日リリースされた 19.04 を入れてみていたが、壊れ…