%{ #include #include #include "parser.tab.h" %} %option noyywrap %x sitname %x comment %x dqstr tdqstr tsqstr %% [-{}<>=+/*,();:] { return yytext[0]; } game { return tokGame; } function { return tokFunction; } situation { return tokSituation; } while { return tokWhile; } for { return tokFor; } each { return tokEach; } in { return tokIn; } if { return tokIf; } then { return tokThen; } else { return tokElse; } command { return tokCommand; } goto { return tokGoto; } not { return tokNot; } true { yylval.bValue = true; return tokBool; } false { yylval.bValue = false; return tokBool; } null { return tokNull; } "<<" { BEGIN( sitname ); } [- a-zA-Z0-9]+ { yylval.sValue = new Bu::String( yytext ); return tokSituationName; } ">>" { BEGIN( INITIAL ); } . REJECT; "//"[^\n]* {} "/\*" { BEGIN( comment ); } "\*/" { BEGIN( INITIAL ); } . {} [a-zA-Z_][a-zA-Z0-9_]* { yylval.sValue = new Bu::String( yytext ); return tokIdent; } [1-9][0-9]* { yylval.iValue = strtoll( yytext, NULL, 10 ); return tokInt; } ([1-9][0-9]*)?\.[0-9]* { yylval.dValue = strtod( yytext, NULL ); return tokFloat; } \"\"\" { BEGIN( tdqstr ); yylval.sValue = new Bu::String(); } [^"]+ { (*yylval.sValue) += yytext; } \" { (*yylval.sValue) += yytext; } \"\"\" { BEGIN( INITIAL ); return tokString; } \'\'\' { BEGIN( tsqstr ); yylval.sValue = new Bu::String(); } [^']+ { (*yylval.sValue) += yytext; } \' { (*yylval.sValue) += yytext; } \'\'\' { BEGIN( INITIAL ); return tokString; } \" { BEGIN( dqstr ); yylval.sValue = new Bu::String(); } [^"]+ { (*yylval.sValue) += yytext; } \" { BEGIN( INITIAL ); return tokString; } [ \t\n\r]+ {} %%