%{
#include "parser.tab.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
%}
%%
"function" { printf("TOKEN: FUNCTION\n"); return FUNCTION; }
"int" { printf("TOKEN: INT\n"); return INT; }
"bool" { printf("TOKEN: BOOL\n"); return BOOL; }
"true"
{ printf
("TOKEN
: TRUE\n"
); return
TRUE; }"false" { printf("TOKEN: FALSE\n"); return FALSE; }
"if" { printf("TOKEN: IF\n"); return IF; }
"else" { printf("TOKEN: ELSE\n"); return ELSE; }
"while" { printf("TOKEN: WHILE\n"); return WHILE; }
"do" { printf("TOKEN: DO\n"); return DO; }
"for" { printf("TOKEN: FOR\n"); return FOR; }
"print" { printf("TOKEN: PRINT\n"); return PRINT; }
"return" { printf("TOKEN: RETURN\n"); return RETURN; }
"==" { printf("TOKEN: EQ\n"); return EQ; }
"&&" { printf("TOKEN: AND\n"); return AND; }
"||" { printf("TOKEN: OR\n"); return OR; }
"<" { printf("TOKEN: LT\n"); return LT; }
">" { printf("TOKEN: GT\n"); return GT; }
"=" { printf("TOKEN: ASSIGN\n"); return ASSIGN; }
"+" { printf("TOKEN: PLUS\n"); return PLUS; }
"-" { printf("TOKEN: MINUS\n"); return MINUS; }
"*" { printf("TOKEN: MUL\n"); return MUL; }
"/" { printf("TOKEN: DIV\n"); return DIV; }
"!" { printf("TOKEN: NOT\n"); return NOT; }
"(" { printf("TOKEN: LPAREN\n"); return LPAREN; }
")" { printf("TOKEN: RPAREN\n"); return RPAREN; }
"{" { printf("TOKEN: LBRACE\n"); return LBRACE; }
"}" { printf("TOKEN: RBRACE\n"); return RBRACE; }
";" { printf("TOKEN: SEMICOLON\n"); return SEMICOLON; }
[0-9]+ { printf("TOKEN: NUM (%s)\n", yytext); yylval.num = atoi(yytext); return NUM; }
[a-zA-Z_][a-zA-Z0-9_]* { printf("TOKEN: ID (%s)\n", yytext); yylval.id = strdup(yytext); return ID; }
[ \t\r\n]+ { /* ignorar espacios */ }
. { printf("TOKEN: ERROR (%s)\n", yytext); return ERROR; }
%%