演習課題

課題 1: 式のインタプリタ

  1. かけ算、割算の優先度をいれたインタプリターを作成しなさい。 tokenの種類に*や/に対応した演算子が増えることになる。 入力として、
     12*3 + 3*4 - 10
    
    を入力、正しく実行できることを確認しなさい。
  2. さらに、括弧をいれた式が正しく処理できるように拡張しなさい。 tokenの種類に括弧に対応するものが増えることになる。 入力として、
      12*(3+13)-10
    
    をいれて正しく実行できることを確認しなさい。

課題2: yaccによる数式の構文解析

変数とプリント関数を持つ式を計算する言語の構文解析プログラムをyaccを用 いて作成しなさい。

構文規則は以下のものとする:

<program> := {<statement> ';'}* 
<statement> := <assignment> | <print_statment>
<assignment> := <variable> '=' <expression>
<print_statemnt> := 'print' <expression>
<expression> := <expression> <op> <expression> |
                <variable> |
                <nubmer> |
                '(' <expression>')'
<variable> := {英字}*
<nubmer> := {数字}*
<op> := '+' | '-' | '*' | '/'
<variable>は、アルファベットからなるシンボルで、<nubmer>は数字の並びで、 各tokenはCと同様に空白で区切られているものとする。演算子の優先度を考慮 すること。

これは、Cのmainのみの機能がある言語である。例えば、以下のようなプ ログラムをかくことができる。

x = 1+2;
y = 100;
z = (x+y)*10+34;
print z+1;
このプログラムを入力し、認識できることを確かめなさい。 なお、構文木は必ずしもつくらなくてもよい。

課題 3: 数式のインタプリタの製作

課題3で作った数式を計算するプログラムのインタプリタを作成しなさい。 課題3にある例を入力し、正しく実行できることを確かめなさい。

課題 4:tiny-Cインタープリタによる8クイーン問題の実行

講義(第4回、第5回)で説明したtiny Cで、8クイーン問題のプログラムを書き、 インタプリターを用いて、この問題を解きなさい。

以下のものを提出すること:

課題 5: スタックマシンへの式のコンパイラの製作

課題3で作った変数とプリント文がある数式を計算するプログラムを講義 (第6回)で説明したスタックマシンにコンパイルするプログラムを作成しなさ い。課題3にある例を入力し、正しく実行できることを確かめなさい。

課題 6: レジスタマシンへの式のコンパイラの製作

課題3で作った変数とプリント文がある数式を計算するプログラムをx86にコン パイルするプログラムを作成しなさい。 課題3にある例を入力し、正しく実行できることを確かめなさい。

課題7: 最終課題

 以下の2つの課題のどちらかを選択し、レポートを提出すること。