rendered paste body/* no yywrap provided */
%option noyywrap
/* maintain line numbers */
%option yylineno
%{
#include "minako.h"
#include <string.h>
%}
%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 */ }
<COMMENT>"*/" { BEGIN(INITIAL); }
<COMMENT>.|\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; }
<<EOF>> { return EOF; }
. { return yytext[0]; }
%%