言語理論とコンパイラ

第十回: yacc 系ツールの原理

2012 年 6 月 22 日

http://www.sw.it.aoyama.ac.jp/2012/Compiler/lecture10.html

Martin J. Dürst

AGU

© 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

最左導出の場合に、いつもできるだけ左の終端記号を置き換える

文法の種類の呼び方

LALR 構文解析の原理

スタックを使って読んだトーケンや途中の非終端記号を蓄積

オートマトンを使ってできるだけ簡単な操作で次のステップを決定

(LA)LR 構文解析の三つのオペレーション

bison の仕組みとデバッグ

宿題: 複素数の電卓

提出: 再来週の木曜日 (7月5日) 19 時 00 分、O 棟 529号室の前

簡単な電卓を複素数の電卓に拡張

複素数の表し方は 5i で虚数を表し、[実部,虚部] で複素数を表す

[] 内には実数演算は可能が 5i などが不可能に文法を設計

complex.lexcomplex.y を提出

A4 両面印刷、表紙なし、左上ホチキス止め、名前と学生番号をコメントに記述

来週質問が可能なので、よく準備し、おおくの質問ができるようにすること!

入力の例: test.in