2015 年 6 月 5 日
http://www.sw.it.aoyama.ac.jp/2015/Compiler/lecture9.html
© 2005-15 Martin J. Dürst 青山学院大学
| 下向き構文解析 | 上向き構文解析 | |
|---|---|---|
| 一般的な方法 | バックトラック | 動的プログラミング (CYK アルゴリズム) |
| 広く使われている方法 | 再帰的下向き構文解析 | LR 法 |
スタートのためのファイル: makefile, calc.y, calc.lex
make の活用flex, bison, gcc
などを忘れず使うのが難しいmake コマンドは makefile
の指定に従い、必要最小限の処理を実行→はタブ;
タブでないとだめ!):target: input1 input2
input3 ...
→target 作成命令make だけで makefile 内の最初の target が作成make target で target が作成makefile.txt のではなく必ず
makefilebison の入力形式の一例%{
#include <stdio.h>
#define YYSTYPE double
int yylex (void);
void yyerror (char const *);
%}
%token NUM PLUS
%%
statement: exp { printf ("Result is %g\n", $1); }
;
exp: exp PLUS exp { $$ = $1 + $3; }
| NUM { $$ = $1; }
;
%%
int main (void)
{ return yyparse (); }
void yyerror (char const *s)
{ fprintf (stderr, "%s\n", s); }
bison の入力形式の骨格bison 関係の宣言など
%{ C 言語の宣言など %}
%%
書換規則 { 実行文 (C 言語) }
書換規則 { 実行文 (C 言語) }
書換規則 { 実行文 (C 言語) }
%%
関数など (C 言語)
関数など (C 言語)
bison の入力形式の構造bison 専用の指示と C
プログラムの一部分が混在
主に、二つの %%
で区切られている三つの部分からなる:
bison 用の設定など#include、グローバル変数の定義と初期化、良く使う字句の定義など%{ ... %} に囲むC 言語そのものと違って、改行、字下げが解釈を左右
bison の書換規則の実例exp: exp PLUS exp { $$ = $1 + $3; }
| NUM { $$ = $1; }
;
: 使用; 使用(attribute(d) grammar(s))
E0 → E1 '-' E3E0) = S(E1) -
S(E3)$$ = $1 - $3提出: 来週の木曜日 (6 月 11 日) 19 時 00 分、O 棟 529 号室の前
calc.y を、test.in から test.check になるように完成
calc.y を A4
(両面印刷、表紙なし、左上ホチキス止め、名前と学生番号をコメントに記述)
で提出
問題点: 出力の改行の差
対応: 改行記号の統一 (notepad2 で File → Line Endings → Unix (LF))