2014 年 6 月 20 日
http://www.sw.it.aoyama.ac.jp/2014/Compiler/lecture11.html
© 2005-14 Martin J. Dürst 青山学院大学
bison と flex
    でプログラムを作成すると段階が多くて、make
    が大事bison の入力形式は flex
    と非常に似ているが、差異もbison は属性文法で構文解析の結果を算出$$、$1、$2 などで参照提出: 来週の木曜日 (6 月 19日) 19 時 00 分、O 棟 529 号室の前
calc.y を、test.in から test.check になるように完成
calc.y を A4
(両面印刷、表紙なし、左上ホチキス止め、名前と学生番号をコメントに記述)
で提出
正解例:[都合により削除]
一回以上の繰り返し:
項目列: 項目 項目列
| 項目
;
ゼロ回以上の繰り返し:
項目列: 項目 項目列
|
;
左結合の場合:
大式: 大式 左結合演算子 小式
| 小式
;
右結合の場合:
大式: 小式 右結合演算子 大式
| 小式
;
(優先度は 小式 > 中式 > 大式)
大式: 大式 演算子 中式
| 中式
;
中式: 中式 演算子 小式
| 小式
;
小式: 開括弧 大式 閉括弧
| 定数
;
bison の仕組みの分析calc.output の内容:
$accept:
    初期記号 $end). で指定)bison でのエラー処理error トークンを含む規則を文法に追加可能statement: ... SEMICOLON { ... }
         | error SEMICOLON { yyerror("Statement error.\n"); yyerrok; }
  error
    トークンの含まれる規則までエラー前のトークンや非終端記号を無視error
    トークンの後に来る入力も無視提出: 再来週の木曜日 (7 月 3日) 19 時 00 分、O 棟 529 号室の前
日付と日数の計算ができる簡単なプログラム言語を
flex と bison で実現し、.lex と
.y のファイルを印刷して提出
A4 両面印刷、表紙なし、ホチキス止め、名前、ふりがな、学生番号を右上に明記
yyyy-mm-dd
        (うるう年などのチェックは不要)PnnD (nn
        は日数そのもの; http://en.wikipedia.org/wiki/ISO_8601#Durations
        など参照)%left,
    %right など使わないこと);
  で区切る。各文の結果を一行で出力来週質問可能なので、よく準備して質問できるようにしましょう
発展問題: 時間、月数、年数など
makefile 内も)YYSTYPEは日付と日数に変更
    (.lexと .y 両方).yで追加のトークンを定義.lexで追加のトークンを認識.outputファイルを見て検討