LEX - Exemplo



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

}
 

 


VoltarHomePróximoe-mail