%{
/*{{定型コード:lex.yy.l(定義部,%{〜%}内)=====================================*/
#ifdef  PIECE
#include "app.h"
#else //PIECE
#include "winapp.h"
#endif//PIECE
#include "y.tab.h"
/* 入力バッファサイズを定義します。
 * デフォルトでは16384と定義されており、P/ECEには大きすぎます。
 * P/ECEに適切な、小さなサイズ(256)に、再定義しました。
 * 入力バッファサイズが不足した場合は、自動的に拡張されるので、問題ありません。
 * 一つのトークンの大きさが、入力バッファサイズを超えたときに、拡張されるようです。
 */
#undef  YY_BUF_SIZE
#define YY_BUF_SIZE 256
/* 入力ファイルの行を数えるための変数を定義します。
 * 「%option yylineno」を指定して、行を数えるコードを自動生成することもできますが、
 * コンパイラが警告を出したりして煩わしくなるので、自分で数えることにしました。
 */
int yylineno;
/* スキャナの入力ファイルを初期化します。
 * yyparse()を実行する都度、その直前に、本関数を呼び出してください。
 */
void yylex_init(FILE* input_file) {
  if(!input_file) DIE();   /* 入力ファイルが指定されていなければエラー停止 */
  BEGIN INITIAL;           /* スタート状態を初期化します */
  yylineno = 1;            /* 入力ファイルの行を初期化します */
  yyrestart(input_file); } /* スキャナの実行を再開するようFlexに通知します */
/* 入力方法を変更するマクロを定義します。
 * lex.yy.c内で、デフォルトのYY_INPUT()よりも先に展開されるので、#undefは不要です。
 * 自作CLiPライブラリの標準入出力は、CRLFをLFに変換しないので、明示的に変換します。
 */
#define YY_INPUT(buf,result,max_size) {  \
  int i = 0; while(i < (max_size)) {     \
    int c = getc(yyin);                  \
    if(c == EOF)  { break; }             \
    if(c == '\r') { continue; }          \
    (buf)[i++] = c;                      \
    if(c == '\n') { yylineno++; break; } \
  } (result) = i; }
/*}}定型コード:lex.yy.l(定義部,%{〜%}内)=====================================*/
%}
/*{{定型コード:lex.yy.l(定義部,%{〜%}外)=====================================*/
/* Suppress the appearance of unneeded routines in the generated scanner. */
%option noinput
%option nounput
/* Make the scanner not call yywrap() upon an end-of-file, but simply assume that there are no more files to scan. */
%option noyywrap
/*}}定型コード:lex.yy.l(定義部,%{〜%}外)=====================================*/

%%

			/*--- sample ---*/
[[:space:]]+		{ /** no job **/ }
0|[1-9][[:digit:]]*	{ yylval.v_num = atoi(yytext); return T_NUM; }
[[:alpha:]][[:alnum:]]*	{ yylval.v_str = yytext;       return T_STR; }
.			{ yyerror("scan error");   return yytext[0]; }

%%
