第十一回: 上向き構文解析、エラー処理
2013 年 6 月 28 日
http://www.sw.it.aoyama.ac.jp/2013/Compiler/lecture11.html
© 2005-13 Martin J. Dürst 青山学院大学
bison
と flex
でプログラムを作成すると段階が多くて、make
が大事bison
の入力形式は flex
と非常に似ているが、差異もbison
は属性文法で構文解析の結果を算出$$
、$1
、$2
などで参照一回以上の繰り返し:
項目列: 項目 項目列
| 項目
;
ゼロ回以上の繰り返し:
項目列: 項目 項目列
|
;
左結合の場合:
大式: 大式 左結合演算子 小式
| 小式
;
右結合の場合:
大式: 小式 左結合演算子 大式
| 小式
;
(優先度は 小式 > 中式 > 大式)
大式: 大式 演算子 中式
| 中式
;
中式: 中式 演算子 小式
| 小式
;
小式: 開括弧 大式 閉括弧
| 定数
;
error
トークンを含む規則を文法に追加可能statement: ... SEMICOLON { ... }
| error SEMICOLON { yyerror("Statement error.\n"); yyerrok; }
error
トークンの含まれる規則までエラー前のトークンや非終端記号を無視error
トークンの後に来る入力も無視提出: 再来週の木曜日 (7月11日) 19 時 00 分、O 棟 529号室の前
形式は A4、両面印刷、表紙なし、左上ホチキス止め、名前、ふりがな、学生番号を右上に明記
簡単なプログラム言語をflex と bison
で実装し、.lex
と .y
のファイルを印刷して提出
;
で区切る。制御文 (if
等)、関数 は無し@ 式
で「式」の結果を改行付きで印刷 (@
の優先度は一番低い)#
から行末まではコメントmakefile
内も)YYSTYPE
は実数から整数に変更
(.lex
と .y
両方).y
で追加のトークンを定義.lex
で追加のトークンを認識.output
ファイルを見て検討