トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

tinyc.l

TINYCPU用コンパイラの字句解析

入力のC言語風プログラムからトークンを切り出す.

トークンリスト

トークン 文字列
AND &&
OR ||
EQ ==
NE !=
GE >=
LE <=
SHL <<
SHR >>
goto GOTO
IF if
ELSE else
WHILE while
DO do
OUT out
INT int
IN in
HALT halt
NUMBER [0-9]+ (数字の列)
NAME [a-zA-Z][a-zA-Z0-9]* (英字で始まる英数字の列)

ソースコード

%{
 #include <string.h>
 #include "y.tab.h"
 int n=0;
%}
%%
[ \t\n\r]
&&    {return(AND);}
\|\|  {return(OR);}
==    {return(EQ);}
!=    {return(NE);}
\>=   {return(GE);}
\<=   {return(LE);}
\<\<  {return(SHL);}
\>\>  {return(SHR);}
do    {yylval.n=++n;return(DO);}
else  {return(ELSE);}
goto  {return(GOTO);}
halt  {return(HALT);}
if    {yylval.n=++n;return(IF);}
in    {return(IN);}
int   {return(INT);}
out    {return(OUT);}
while    {yylval.n=++n;return(WHILE);}
[0-9]+       {yylval.s=strdup(yytext);return(NUMBER);}
[a-zA-Z][a-zA-Z0-9]*    {yylval.s=strdup(yytext);return(NAME);}
.            {return(yytext[0]);}
%%
int yywrap(){ return(1);}

最終更新時間:2008年08月05日 10時14分46秒