試験終わり
7/16
- プログラミング第2
- いつもテキストファイルで提出しているレポートを手で書いたようなものだった。あほみたいに手が疲れた。
7/17-19
- なし
- 試験勉強で忙しかったのでゲームをがんばった。
7/20
- 通信理論
- 持ち込みなんでもあり+それが分かってる問題。前日の19:30に学校に行ったら全く開いていなかったので、仕方なく黒インクを犠牲にしてせっせとPDFを印刷したものと授業ノートががんばった。
- 計算理論
7/21
- 地球環境科学1
- 教科書を写すゲーム…で済んでたのか?
- 論理学序論
- …すごい途中退出だ。
7/22
- コンパイラ構成論
- ネットワーク工学1
まだ試験が残ってる人たちも巻き込んで大愚者してしまったがいいのか…。いいよね。
なお、コンパイラ構成論からは素晴らしいレポート2が出ています(7/31まで)。試験の得点に加点になります。言語が慣れレベルが圧倒的に不足していると思われるOCamlであることもあって試験と比べると難易度はぶっ飛んでる気もしますが、甘えとゆとりを排除しましょう。
- 優先順位規則を用いて,shift/reduce競合が生じないよう にしなさい.
- 構文エラーについて,近傍のトークンを示すように しなさい.
- 構文エラーについて,行番号を示すようにしなさい.
- 変数のポストインクリメント(CやJavaでは x++)を実現 しなさい.
- repeat-until文を実現しなさい.
- for文を実現しなさい(どのような構文でもよい).
- x ** y によって,xのy乗を計算するような演算子**を実 現しなさい.
- 関数を定義できるようにしなさい.
- 関数の入れ子定義ができるようにしなさい.
- その他.
なお、このコンパイラは
{ int a, b, m, n, r; sprint ("You must give 2 integers.\n"); sprint ("First integer: "); scan (a); sprint ("Second integer: "); scan (b); m = a; n = b; r = m - (m / n) * n; m = n; n = r; while (r > 0) { r = m - (m / n) * n; m = n; n = r; } sprint ("Answer = "); iprint (m) ; sprint ("\n"); }
このような自作言語のコード(サンプルを転載)をJavaバイトコードに変換してjavaコマンドで実行できる形式にします(バイトコードのアセンブリ(文字列)を吐いてそれをアセンブラでclassファイルにするんだけどね)。オリジナル文法からclassファイルができるので結構楽しいかもしれません。まあ覚悟があればどうぞ☆。ところで関数の入れ子定義って関数も変数に代入可能だったり引数に渡せたりその時点での環境を保持したりするの?これJavaバイトコードに変換しないといけないんだよ?Javaバイトコードは普通のスタックマシンコードで型に厳密な手続き型コードなので無茶な文法の追加は自重しましょう。