1. Top » 
  2. スポンサー広告 » 
  3. コンパイラについてのメモ #3
  4. 大学関係 » 
  5. 計算機科学実験及実習 » 
  6. コンパイラについてのメモ #3

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • Genre:

コンパイラについてのメモ #3

文法ファイル(bisonが処理するもの、拡張子.y)は実験では指定されている。
ともかく簡単な例で確認しよう。
例示は理解の試金石なのだから。

足し算と掛け算だけを解析する文法とは
掛け算は足し算よりも優先順位が高いことに注意します。

%{
#include <stdio.h>
%}
%token Integer
%%
program:
expr { printf("%d\n", $1); }
;
expr:
mult_expr { $$ = $1; }
| mult_expr '+' expr { $$ = $1 + $3; }
;
mult_expr:
Integer { $$ = $1; }
| Integer '*' mult_expr { $$ = $1 * $3; }
;
%%
int yyerror(char *s){
fprintf(stderr, "%s\n", s);
return 0;
}
main(){
yyparse();

}



この文法ではIntegerとう存在を定義します(defineみたいに)
これは終端記号→これ以上細分化できないもので、数値です。
こんなのはtokenと書いてファイルの先頭に定義できます。

結局文法が言っていることは

 プログラム → 式
 式 → 乗算後の式
     又は 乗算後の式+式
 乗算後の式 → 数値
         又は 数値×数値

と言っています。
ようするに掛け算は足し算よりも先に計算することをいっています。

結局これをbisonに通します

bison -d calc.y



-dを使うことでcalc.tab.hというヘッダを作ってくれます。
これの中にtokenなどがどのようにdefineされるのかとかを書いてくれるらしいです。
あとはyyerrorなどもおそらく書いてくれます。これを使ってflexと連携します。


流れ

1.bison -d calc.y
->making calc.tab.c and calc.tab.h
2.flex calc.l
->making lex.yy.c using calc.tab.h



こうして一連に必要なファイルが全部できる。(らしい)
関連記事
スポンサーサイト

Comment

コメントフォーム
このエントリへコメントを書く
(任意)
(任意)
(任意)
(必須) HTMLタグは使用できません
(任意) ID生成と編集に使用します
(任意) 非公開コメントにする

Page Top

Trackback

Trackback URI
http://parabola0.blog86.fc2.com/tb.php/312-5ffee463 この記事にトラックバックする(FC2ブログユーザーのみ)

Page Top

訪問者

お引っこし。 http://parabola.sblog.jp/

プロフィール

parabola0

Author:parabola0
Twitter用ですが…。
プロフィール

最新記事
最新コメント
最新トラックバック
カテゴリ
月別アーカイブ
検索フォーム
リンク

このブログをリンクに追加する

QRコード
QRコード
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。