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秒