/* seção de declaração de variáveis */
%{
/* definições das constantes manifestas
LT, LE, EQ, NE, GT, GE,
IF, THEN, ELSE,ID, NÚMERO, RELOP */
%}
/* definições regulares */
delim [ \t\n]
ws {delim}+
letra [A-Za-z]
digito [0-9]
id {letra} ({letra} | digito})*
número {dígito} + (\. {dígito}+)? (E[+\-]? {dígito}+)?
/* seção de regras de tradução */
%%
{ws} {/* nenhuma ação e nenhum valor retornado */}
if {return (IF);}
then {return (THEN);}
else {return (ELSE);}
{id} {yylval = instalar_id(); return (ID);}
{número} {yylval = instalar_num(); return (NÚMERO);}
"<" {yylval = LT; return (RELOP);}
"<=" {yylval = LE; return (RELOP);}
"=" {yylval = EQ; return (RELOP);}
"<>" {yylval = NE; return (RELOP);}
">" {yylval = GT; return (RELOP);}
">=" {yylval = GE; return (RELOP);}
%%
/* funções auxiliares */
instalar_id() {
/* procedimento para instalar o lexema, cujo primeiro caractere
é apontado por yytext e cujo comprimento é yyleng, na tabela
de símbolos e retornar um apontador para o mesmo */
}
instalar_num() {
/* procedimento similar para instalar um lexema que seja um número */
}