/* no yywrap provided */ %option noyywrap /* maintain line numbers */ %option yylineno %{ #include "minako.h" #include %} %x COMMENT TAB [ \t] NEWLINE [\n] WINDOZE [\r\n] MAC [\r] WHITESPACE {TAB}|{NEWLINE}|{WINDOZE}|{MAC} ZIFFER [[:digit:]] INTEGER [[:digit:]]+ FLOAT {INTEGER}"."{INTEGER}|"."{INTEGER} CHAR_SMALL [a-z] CHAR_BIG [A-Z] UMLAUTE [ä|ü|ö] CHAR {CHAR_BIG}|{CHAR_SMALL}|{UMLAUTE}|_|- %% {WHITESPACE}+ { /* Whitespace -> nichts tun */ } "//"(.)*[\n] { /* C++-Kommentar -> nichts tun */ } "/*" { BEGIN(COMMENT); /* C-Kommentar -> nichts tun */ } "*/" { BEGIN(INITIAL); } .|\n { /* Ende C++-Kommentar */} "==" { return EQ; } "!=" { return NEQ; } "<=" { return LEQ; } ">=" { return GEQ; } "&&" { return AND; } "||" { return OR; } "begin" { return KW_BEGIN; } "bool" { return KW_BOOLEAN; } "do" { return KW_DO; } "else" { return KW_ELSE; } "float" { return KW_FLOAT; } "for" { return KW_FOR; } "if" { return KW_IF; } "int" { return KW_INT; } "printf" { return KW_PRINTF; } "return" { return KW_RETURN; } "void" { return KW_VOID; } "while" { return KW_WHILE; } {FLOAT}([eE]([-+])?{INTEGER})?|{INTEGER}[eE]([-+])?{INTEGER} { yylval.floatValue = atof(yytext); return CONST_FLOAT; } {INTEGER} { yylval.intValue = atoi(yytext); return CONST_INT; } "true" { yylval.intValue = 1; return CONST_BOOLEAN; } "false" { yylval.intValue = 0; return CONST_BOOLEAN; } {CHAR}({CHAR}|{ZIFFER})* { yylval.string = strdup(yytext); return ID; } <> { return EOF; } . { return yytext[0]; } %%