試験終わり

7/16

  • プログラミング第2
    • いつもテキストファイルで提出しているレポートを手で書いたようなものだった。あほみたいに手が疲れた。

7/17-19

  • なし
    • 試験勉強で忙しかったのでゲームをがんばった。

7/20

  • 通信理論
    • 持ち込みなんでもあり+それが分かってる問題。前日の19:30に学校に行ったら全く開いていなかったので、仕方なく黒インクを犠牲にしてせっせとPDFを印刷したものと授業ノートががんばった。
  • 計算理論
    • 入院のせいで最終回に出られなかったのが一番響いた気がする。病室で教科書読んでたんだけどねえ。さすがにどこまで範囲なのか分からないし試験に出ると思って読んでないからあやふや。時間計算量とか空間計算量とかチューリングマシンの実在コンピュータの模倣とか停止性判定の証明とか。aがn個bがn個を受理するのチューリングマシンの構成がめんどくさすぎて天才ボーナスとか書いてある停止性判定プログラムが存在しないことの証明やってたら途中で詰まって両方ともいい加減なまま終わった。また舐めプか。

7/21

  • 地球環境科学1
    • 教科書を写すゲーム…で済んでたのか?
  • 論理学序論
    • …すごい途中退出だ。

7/22

  • コンパイラ構成論
    • なんか最終回の補講日に今日やるとこ出ますって言ってたからifとかwhileループとかのJavaバイトコードか疑似機械語あたりへの変換が出るのかと思ってたら、1:数式を数学での優先順位に従って構文木に変換し、2:それを逆ポーランド記法に変換し、3:それを評価したときの各ステップのスタックの様子を書け、だった。こっちかい…。量が明らかに90分のものではなかったので途中退出により1限が30分で終わり、MMCでパワプロ。もちろんKDVにもMMCにも誰もいない。早朝のソロパワプロは気分がいい。
  • ネットワーク工学1
    • A4の表裏の手書きメモのみ持ち込み可なので当日の朝PCで書いておいたものをプリンタ用紙に書き写すという残念っぷり。IPパケットの「TTL(Time To Live)」と「上位層プロトコル」が持ち込み用紙になかったが、アドリブでカバー。上位層プロトコルってそのままじゃないか…。最後にダイクストラアルゴリズムの実行の様子を1ステップごとに表にするのがあったけどそのままやっておきました。こればかりは残当。メモ作成時もはいはい出たらアドリブアドリブでスルーしてたし…。

まだ試験が残ってる人たちも巻き込んで大愚者してしまったがいいのか…。いいよね。


なお、コンパイラ構成論からは素晴らしいレポート2が出ています(7/31まで)。試験の得点に加点になります。言語が慣れレベルが圧倒的に不足していると思われるOCamlであることもあって試験と比べると難易度はぶっ飛んでる気もしますが、甘えとゆとりを排除しましょう。

  1. 優先順位規則を用いて,shift/reduce競合が生じないよう にしなさい.
  2. 構文エラーについて,近傍のトークンを示すように しなさい.
  3. 構文エラーについて,行番号を示すようにしなさい.
  4. 変数のポストインクリメント(CやJavaでは x++)を実現 しなさい.
  5. repeat-until文を実現しなさい.
  6. for文を実現しなさい(どのような構文でもよい).
  7. x ** y によって,xのy乗を計算するような演算子**を実 現しなさい.
  8. 関数を定義できるようにしなさい.
  9. 関数の入れ子定義ができるようにしなさい.
  10. その他.

なお、このコンパイラ

{
	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バイトコードは普通のスタックマシンコードで型に厳密な手続き型コードなので無茶な文法の追加は自重しましょう。