%{
#include <stdio.h>

#define LT 256
#define LE 257
#define EQ 258
#define GT 259
#define IF 260
#define THEN 261
#define ELSE 262
#define ID 263
#define NUMBER 264
#define RELOP 265

int yylval;

int install_id(void);
int install_num(void);
%}

delim     [ \t\n]
ws        {delim}+
letter    [A-Za-z]
digit     [0-9]
id        {letter}({letter}|{digit})*
number    {digit}+(\.{digit}+)?(E[+\-]?{digit}+)?

%%

{ws}      { }
if        { return IF; }
then      { return THEN; }
else      { return ELSE; }
{id}      { yylval = install_id(); return ID; }
{number}  { yylval = install_num(); return NUMBER; }
"<"       { yylval = LT; return RELOP; }
"<="      { yylval = LE; return RELOP; }
"="       { yylval = EQ; return RELOP; }
">"       { yylval = GT; return RELOP; }

%%

int install_id(void) {
    return 1;
}

int install_num(void) {
    return 2;
}

int yywrap(void) {
    return 1;
}

int main(void) {
    int token;
    printf("Ready for input. Type your text (Ctrl+D to exit):\n");
    
    while ((token = yylex())) {
        printf("Token ID: %d", token);
        if (token == RELOP || token == ID || token == NUMBER) {
            printf(" | yylval: %d", yylval);
        }
        printf("\n");
    }
    return 0;
}