トップ 一覧 検索 ヘルプ 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-Z0-9]+    {yylval.s=strdup(yytext);return(NAME);}
 [a-zA-Z][a-zA-Z0-9]*    {yylval.s=strdup(yytext);return(NAME);}
 .            {return(yytext[0]);}
 %%
 int yywrap(){ return(1);}