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

C言語のとても小さいやつ、 Tiny Cというのが今回の実験の対象。
字句解析はflex、構文解析はbisonに任せる。
というわけで実際にC言語で使うような字句を区切るためには
こんな感じのlexファイルにしたらいいんじゃないかな。

%option noyywrap
%option yylineno
%{
#include "second.tab.h"
%}
ALPHA    [A-Za-z]
ALPHAP    [A-Za-z_]
DIGIT    [0-9]
%%
else                {return (ELSE);}
if                {return (IF);}
int                {return (INT);}
return                {return (RETURN);}
while                {return (WHILE);}
{ALPHA}{ALPHAP}*        {return (IDENTIFIER);}
{DIGIT}*            {return (CONSTANT);    }
","                {return COMMA;}
";"                {return SCOLON;}
"("                {return LK;}
")"                {return RK;}
"{"                {return LTK;}
"}"                {return RTK;}
"="                {return IN;}
"||"               {return OR;}
"&&"               {return AND;}
"=="               {return EQ;}
"!="               {return NEQ;}
"<"                {return LT;}
">"                {return MT;}
"<="               {return LTE;}
">="               {return MTE;}
"+"                {return ADD;}
"-"                {return SUB;}
"*"                {return MUL;}
"/"                {return DIV;}
[ \t\n]                ;
.                {yyerror("Error: invalid character");}
%%
実験が少しずつ進んでいきます・・・。
これを利用して文法に正しいかどうか合致するかどうかを検査するのがbisonの仕事。
次はそれを考えます。
(とはいっても文法は指定されてるのだけどね)

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です