/* import宣言はここに書く */ import java.io.IOException; %% // 生成するクラスの名前 %class CalcLexer // 生成するクラスが実装するインタフェース %implements CalcTokens // 生成するメソッドの戻り値型 %int %unicode %line %column %{ /* Jaccとのインタフェースのためのコード */ int token; double yylval; int nextToken() { try { return token = yylex(); } catch (IOException e) { return token = ENDINPUT; } } int getToken() { return token; } double getSemantic() { return yylval; } %} ws = [ \t\f] digit = [0-9] number = {digit}+(\.{digit}+)?(E[+\-]?{digit}+)? %% {ws}+ { /* 無視する */ } {number} { yylval = Double.parseDouble(yytext()); return NUMBER; } [+\-*/()=\n] { return (int)(yytext().charAt(0)); } /* error fallback */ \r { /* 無視する */ } . { throw new Error("不正な文字です <"+ yytext()+">"); }