プログラミング III の課題.グループ課題.PL/0 なるプログラミング言語のコンパイラを作成する・・・前に,外部仕様・内部仕様を設計する課題.
俺は構文解析部 (パーザ) を担当することに.
外部仕様はともかく,内部仕様は,実際にコードを書いてみないと まともなものを設計できそうにない.本末転倒.
ともかく,資料にある Pascal のソースを参考にして,構文解析部のみを暫定的に作成し始めた.が,字句解析部・意味解析部との連携が当然必要なわけで,結局これらも考慮しながら作成する必要がある.担当箇所を決めたのは 「今のところ」 あまり意味がない.
11 日 (土) にグループのメンバーが集まり,内部仕様を順次設計・策定していくことにしている.それまでにどの程度まで作成できるだろうか.
おまけ:学外の人のため(?) のコンパイラ講座
正確・適切な表現ではないかもよ ? ということで.
コンパイラが持つ機能は以下の 4 つに大別できる.
- 字句解析
- あるプログラミング言語で書かれたソースファイルを読み込み,その文字列を 識別子・予約語・数値 などに切り分け,トークンに変換する.
- 構文解析
- トークン列が言語の構文則 (文法) を満たしているか否かチェックし,構文木を生成する.
- 意味解析
- 辻褄の合う記述がなされているかチェック (変数・関数の宣言・定義の有無,型チェックなど) し,構文木に情報を付加する.
- コード生成
- 以上の解析結果を基にアセンブリ言語を書き出す.
はyさか
コンパイラ本当につくるんですね…
TUTすごすぎです。
y-iihoshi
当の本人たちも半信半疑.
まー, PL/0 の言語仕様が比較的簡単で,かつ吐き出すアセンブリ命令が 8 種のみ,っつーことで,実験向けに調整されてはいるんですが.
しかし本当に出来るんかいな・・・
はyさか
実験向けなんですか。
PL/0とPL/Iって関わりあるんですかね?
y-iihoshi
PL/0 は Pascal の縮小版,ですかね.
この教科では,資料として
Niklaus Wirth 著 ``ALGORITHMS + DATA STRUCTURES = PROGRAMS''
の訳本の一部が与えられてます.この人,Pascal の開発者だそうな.今知った.
PL/I との関係は不明ですねぇ.