第 2 回レポートについて


次のようなプログラムを作成し、またそれに対するレポートを作成して下さい。
(締切 2月 22日 火曜日 18時)

問 1(再帰的下向き構文解析)

次の文法:
   Start   -> Expr EOL
   Expr    -> CON
	    | FunCall
   FunCall -> FID '(' Expr ',' Expr ')'

   -- 以下は終端記号: 字句解析部で処理
   EOL     -> '\n'
   CON     -> '0' | '1' | ... | '9'   --  一桁の数のみ
   FID     -> '+' | '-' | '*' 
に対する再帰的下向き構文解析プログラムを参考にして、次の文法(記号の名前が英語になっただけで、 本質的には教科書・演習問題 5.2の文法と同じです):
   Start   -> Expr EOL
   Expr    -> VAR
            | CON
	    | FunCall
            | '(' Expr ')'
   VAR     -> VID Suffix
   Suffix  -> '[' Expr ']'
            | ε(空列)
   FunCall -> FID '(' Args ')'
   Args    -> Expr ArgRest
            | ε(空列)
   ArgRest -> ',' Expr ArgRest
            | ε(空列)

   -- 以下は終端記号: 字句解析部で処理
   EOL     -> '\n'
   CON     -> '0' | '1' | ... | '9'   --  一桁の数のみ
   FID     -> '+' | '-' | '*'
   VID     -> 'a' | 'b' | ... | 'z'   	
に対する再帰的下向き構文解析プログラムを作成せよ。

入力が文法的に正しければ "Correct!"(または「正しい!」)と表示し、 間違っていれば、適当なエラーメッセージを出力するようにしてください。
文法的に正しいかどうかを判断するのみで、 それ以上のこと(計算結果を求めるなど)はする必要はありません。

問 2 (Yacc (Bison))

Bisonについて例題を書き換えて、さらに累乗の演算子(^)にも対応したYaccによる構文解析・計算プログラムを作成せよ。
ただし 「^」は右結合で 「*」や「/」、さらに単項の「-」よりも、 優先順位が高いものとする。

解釈備考
2*3^22*(3^2) *」よりも優先順位が高い
2^3^22^(3^2) 右結合
-3^2-(3^2) 単項の「-」よりも優先順位が高い
ヒント:


作成要領

レポートはワードで作成します。 作成したソースファイルとワードのファイルをオンラインで提出してください。 また同時に、ワードを A4用紙に印刷し、 ホッチキスで左上を綴じたものを学務係前のレポートボックスに提出してください。

オンラインの提出場所は

の各自の学籍番号のフォルダです。必要なファイルは
  1. ワードのファイル(ファイル名 report2.doc
  2. 問 1の Cのソースファイル(ファイル名 toi1.c
  3. 問 2の bisonのソースファイル(ファイル名 toi2.y
です。 (ファイル名は「半角」英数字のみを用いること。)

レポート作成上の注意

問題を数人で相談しながら解くのはもちろん構いませんが、 実行例とレポートは各自で作成してください。 実行例まで同一のレポートは不正レポートと見なします。
システムプログラム 99のホームページ
Koji Kagawa (kagawa@eng.?????)