%{
#include "y.tab.h"
%}

digit   [0-9]
id      [a-zA-Z_][a-zA-Z0-9_]*

%%

"if"                { return IF; }
"else"              { return ELSE; }
"while"             { return WHILE; }
"read"              { return READ; }
"print"             { return PRINT; }
{id}                { yylval.strval = strdup(yytext); return IDENTIFIER; }
{digit}+            { yylval.numval = atoi(yytext); return NUMBER; }
"/"                 { return DIVIDE; }
"="                 { return ASSIGN; }
"=="                { return EQUAL; }
"!="                { return NOTEQUAL; }
"<"                 { return LESS; }
">"                 { return GREATER; }
"<="                { return LESSEQ; }
">="                { return GREATEREQ; }
"{"                 { return LBRACE; }
"}"                 { return RBRACE; }
"("                 { return LPAREN; }
")"                 { return RPAREN; }
";"                 { return SEMICOLON; }
[ \t\n]+            ;   // Skip whitespace
.                   { return yytext[0]; }

%%

int yywrap() {
    return 1;
}
