33.5K Views
March 20, 25
スライド概要
【初学者歓迎】東葛.dev in 柏 LT交流会【第5回】
https://toukatsu.connpass.com/event/346233/
Working at Deno Land, Studying at Georgia Tech
大学院の課題でコンパイラを 作っている 2025/03/20 (Thu) 東葛.dev #5 Yusuke Tanaka
Who am I 米ジョージア工科大学のオンライン修士 課程に通いながらDeno Land Inc.で Deno Deployを作っています🦕 最近はisolate cluster in k8sのリソー ス管理、スケーリングロジックなどをやっ ています GitHub: https://github.com/magurotuna 𝕏: https://x.com/yusuktan LinkedIn: https://www.linkedin.com/in/yusuktan/
今日の内容
コンパイラ作ってる
グローバル変数 プログラムの見た目はこんな感じ 関数定義 言語機能はかなり原始的 ローカル変数 - 組み込み型はint, floatだけ - 固定長の配列型を定義することは できる - 関数の引数、返り値には使え ない - 極めて限定的な標準ライブラリ - printi, printfなど 条件分岐 main関数(エントリーポイント) aaaa
コンパイラの作り方 知ってますか? 🙋🙋🙋
コンパイラの構成 ● フロントエンド ○ トークナイズとパース ○ セマンティクス解析 ○ 中間表現への変換 ● ミドルエンド ○ 制御フロー解析、生存解析 ● バックエンド ○ 中間表現に対応するアセンブリの選定 ○ レジスタの割り付け ○ アセンブリ出力
これをパースすると……
生成されたASTをgraphvizでビジュアライズしたもの
重要な部分を拡大 3 ** 4 ** 5 を (3 ** 4) ** 5 ではなく 3 ** (4 ** 5) として処理する必要が ある(実際の数学の慣 例に従うため)
文法定義を形式的にやることでトークナイ ザ・パーサを機械的に生成してくれるプログ ラムを使うことも多い (yacc, bisonなどが有名) 課題ではANTLR4を利用 ANTLR4用の文法定義ファイル 主要なプログラミング言語に対しては GitHub上で文法定義がメ ンテナンスされている https://github.com/antlr/grammars-v4
さきほどのフィボナッチプログラムを 制御フロー解析すると ……
● ● ● 条件分岐などがグラフ(ノードと矢印)で表現されて いる コンパイラはこの情報をもとに解析を行う 例: 生存解析(プログラムのどの時点でどの変数が 生きているか?未来に使われる可能性がある変数 は記憶しておく必要があるため)
今は最後の課題にとりかかっています ● レジスタ割付 ● 命令選択 ● アセンブリ出力
現時点の感想 : めちゃくちゃ原始的な言語でも コンパイラの仕事多すぎ!! コンパイラはすごい コンピュータの歴史はすごい(小並感)
Thank you all 🦕