4.5 構文解析の自動化 (1)YACCとは YACC(yet another compiler compiler) ■ UNIX上の構文解析自動生成システム ■ 構文規則を入力して、構文規則に合致した記号列を解析するCプ ログラムを生成する。 ■ 手法はLALR(1) (2)YACCの入力ファイル 入力ファイルは以下の3部分から構成される。 ① トークンと演算子の宣言(優先順位は記述された順序) ② 構文規則の記述 ⅰ) 構文がプログラム中に出現したときの処理を構文要素間に 中括弧で囲んでCプログラムで記述することができる。 ⅱ) 構文要素に何らかの値を対応させることで、その規則の 構文要素の値($$, $1, $2)を記号で参照することができる ⅲ) 構文エラーが起きたときどこまで解析をスキャンするかを 指定できる。 ③ 構文規則内のCの関数を記述(yylex と yyerror は名前固定) (3)YACC入力ファイル例 %start program %token IDENT, LITERAL; ……… %right EQUAL; %left OROR; ……… %% program : {initCode();} ext_def_list {checkFunc();}; ext_def_list : ext_def_list external_def | ; external_def : val_decl | function | error SEMICOLON ; ……… Statement : ……… | IF {clearTree();} LPAR expression RPAR {if1(compile(T)$4,FJUMP));} statement {if2();} if_tail {if3();} | ………; if_tail : ELSE statement | /*empty/; ……… %% ……… static int yylex(){ ……… } yyerror(s) char *s; { print(“%4d: %s\n”,tokenline,s); errcnt++; } ………
© Copyright 2024 ExpyDoc