第十回: yacc 系ツールの原理
2012 年 6 月 22 日
http://www.sw.it.aoyama.ac.jp/2012/Compiler/lecture10.html
© 2005-12 Martin J. Dürst 青山学院大学
提出: 来週の木曜日 (6 月 21日) 19 時 00 分、O 棟 529 号室の前
calc.y を、test.in から test.check になるように完成
calc.y
を A4
(両面印刷、表紙なし、左上ホチキス止め、名前と学生番号をコメントに記述)
で提出
正解例: calc_final.y
問題点: 出力の改行の差
対応: 改行記号の統一 (notepad2 で File → Line Endings → Unix
(LF)); .lex
の [ \t\n]
を [ \t\n\r]
に拡張
簡単な例:
E → E '+' T
T → integer
最左導出の場合に、いつもできるだけ左の終端記号を置き換える
スタックを使って読んだトーケンや途中の非終端記号を蓄積
オートマトンを使ってできるだけ簡単な操作で次のステップを決定
(LA)LR 構文解析の三つのオペレーション
bison -v
で作った機械の明細のファイルを作成
(例: calc.output)#define YYDEBUG 1
でデバッグを ON提出: 再来週の木曜日 (7月5日) 19 時 00 分、O 棟 529号室の前
簡単な電卓を複素数の電卓に拡張
複素数の表し方は 5i
で虚数を表し、[実部,虚部]
で複素数を表す
[]
内には実数演算は可能が 5i
などが不可能に文法を設計
complex.lex
と complex.y
を提出
A4 両面印刷、表紙なし、左上ホチキス止め、名前と学生番号をコメントに記述
来週質問が可能なので、よく準備し、おおくの質問ができるようにすること!
入力の例: test.in