%{
#include "ast.hpp"
#include "lexer.hpp"
#include "parser.hpp"
%}

D [0-9]
L [a-z]
W [ \t\n]

%option noyywrap
%%

"begin"         { return T_begin; }
"do"            { return T_do; }
"else"          { return T_else; }
"end"           { return T_end; }
"for"           { return T_for; }
"if"            { return T_if; }
"let"           { return T_let; }
"print"         { return T_print; }
"then"          { return T_then; }
"var"           { return T_var; }
"int"           { return T_int; }
"bool"          { return T_bool; }
"true"          { return T_true; }
"false"         { return T_false; }

[\=\+\-\*\/\%\(\)\:\>\<]  { yylval.op = yytext[0]; return yytext[0]; }

{D}+            { yylval.num = atoi(yytext); return T_const; }
{L}             { yylval.var = yytext[0]; return T_id; }
{W}+            { /* nothing */ }

'.*\n           { /* nothing */ }

.               { fprintf(stderr, "\033[91mIllegal character %c at line %d\033[0m\n", yytext[0], yylineno); }

%%

