←bisonの警告 | ↑目次 | →できたコンパイラの確認

情報科学実験II コンパイラ作成

第5回

課題5.2において注意すべき点

表5.2をどう見るのか

表5.2にしたがって、.lファイルを作成します。
定義部は#include "ast.h"と#include "picoc.tab.h"だけ。#define文は不要です。
ルール部については、各行がルール(例えばリスト5.1の17-19行目)に相当します。「入力」に相当するパターンをルールの先頭に書きます。キーワードはそのまま" "で囲めばOK。そうでないものは正規表現を考える必要があります。{ } の中に書くアクションとしては、「yylvalの値」がある場合には、まずそのようにyylvalの値を代入します。「返り値」の内容をreturnで返します。
例えば、表5.2の4行目に対応する.lファイルの記述は、リスト5.1の8-10行目とほほいっしょです。ただし、yylvalではなくyylval.ival、さらに、数値はint型なので、atofではなく...

リスト5.2を入力してどうするのか

完成した実行ファイルの名前をkadai52だとします。一方で、C言語で書かれたソースファイル(なんでもよい)を用意します。例えばsample.cとして
int main(){
int x;
    x=1;
    /* abcde */
    return 0;
}
を作ります。これを
cat sample.c | ./kadai52
のように実行すれば、トークンに切り分けた結果が出力されるはずです。
TINT
ID: main
CHAR: (
CHAR: )
CHAR: {
TINT
ID: x
CHAR: ;
ID: x
ASSIGN
NUMBER: 1
CHAR: ;
RETURN
NUMBER: 0
CHAR: ;
CHAR: }
sample.cを作るのが面倒ならば、
cat | ./kadai52
と実行して、キーボードからソースファイルを入力して、最後にCtrl+Dを入れても同じことです。

makeに関する注意

makeを利用する場合には、リスト5.2のファイルの名前(.cの前の部分)とbisonに入力するファイルの名前(.yの前の部分)は別にすること。同じ名前(例えば、pico.cとpico.y)にしてしまうと、makeがpico.yからpico.cを作ろうとしてハマります。
トップページ