/* 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 */ }