KAREL.LEX



/* MODULO AUXILIAR PARA EL ROBOT KAREL */
/* ==================================================*/
/* === Programa:    karel.lex                     ===*/
/* === TEcnica:     Dirigida por la sintAxis       ===*/
/* === Programador: J. Rafael R. ochoa            ===*/
/* ==================================================*/

%{
#include "y.tab.h"


extern int lineno;


%}

st                     [ \t]
linea                  [ \n]
blank                  ({st})
let                    [a-z]
dig_pos                [1-9]
dig                    [0-9]
dig_seq                ({dig_pos}{dig}*)
entero                 ({dig_seq}|[0])
let_o_dig              ([a-z0-9_-])
identificador          ({let}{let_o_dig}*)
todo                   (\<[^\>]*\>)

%%
\<                             { while(getc(yyin) != '>') ;}
PARED_JUNTO_A_AVENIDA          { return PARED_JUNTO_A_AVENIDA; }
DE_CALLE                       { return DE_CALLE; }
PARED_JUNTO_A_CALLE            { return PARED_JUNTO_A_CALLE; }
DE_AVENIDA                     { return DE_AVENIDA; }
A                              { return A; }
HAY                            { return HAY; }
MONEDAS_EN_CALLE               { return MONEDAS_EN_CALLE; }
AVENIDA                        { return AVENIDA; }
KAREL_ESTA_EN_CALLE            { return (KAREL_ESTA_EN_CALLE); }
VIENDO_AL                      { return VIENDO_AL; }
NORTE                          { return NORTE; }
SUR                            { return SUR; }
ESTE                           { return ESTE; }
OESTE                          { return OESTE; }
CON                            { return CON; }
MONEDAS_EN_SU_BOLSA            { return MONEDAS_EN_SU_BOLSA; }
INICIO_DE_AMBIENTE             { return INICIO_DE_AMBIENTE; }
FIN_DE_AMBIENTE                { return FIN_DE_AMBIENTE; }
INICIO_DE_PROGRAMA             { return INICIO_DE_PROGRAMA; }
FIN_DE_PROGRAMA                { return FIN_DE_PROGRAMA; }
DEFINE_NUEVA_INSTRUCCION       { return DEFINE_NUEVA_INSTRUCCION; }
COMO                           { return COMO; }
INICIO                         { return INICIO; }
FIN                            { return FIN; }
INICIO_DE_EJECUCION            { return INICIO_DE_EJECUCION; }
FIN_DE_EJECUCION               { return FIN_DE_EJECUCION; }
MIENTRAS                       { return MIENTRAS; }
HAZ                            { return HAZ; }
REPITE                         { return REPITE; }
VECES                          { return VECES; }
SI                             { return SI; }
ENTONCES                       { return ENTONCES; }
SINO                           { return SINO; }
avanza                         { return AVANZA; }
gira_a_la_izquierda            { return GIRA_A_LA_IZQUIERDA; }
recoge_moneda                  { return RECOGE_MONEDA; }
coloca_moneda                  { return COLOCA_MONEDA; }
apagate                        { return APAGATE; }
frente_despejado               { return FRENTE_DESPEJADO; }
frente_bloqueado               { return FRENTE_BLOQUEADO; }
izquierda_despejada            { return IZQUIERDA_DESPEJADA; }
izquierda_bloqueada            { return IZQUIERDA_BLOQUEADA; }
derecha_despejada              { return DERECHA_DESPEJADA; }
derecha_bloqueada              { return DERECHA_BLOQUEADA; }
no_junto_a_moneda              { return NO_JUNTO_A_MONEDA; }
junto_a_moneda                 { return JUNTO_A_MONEDA; }
no_hacia_el_norte              { return NO_HACIA_EL_NORTE; }
hacia_el_norte                 { return HACIA_EL_NORTE; }
no_hacia_el_sur                { return NO_HACIA_EL_SUR; }
hacia_el_sur                   { return HACIA_EL_SUR; }
no_hacia_el_este               { return NO_HACIA_EL_ESTE; }
hacia_el_este                  { return HACIA_EL_ESTE; }
no_hacia_el_oeste              { return NO_HACIA_EL_OESTE; }
hacia_el_oeste                 { return HACIA_EL_OESTE; }
con_monedas_en_su_bolsa        { return CON_MONEDAS_EN_SU_BOLSA; }
sin_monedas_en_su_bolsa        { return SIN_MONEDAS_EN_SU_BOLSA; }
{entero}                       { sprintf(yylval.str, "%s", yytext);
                                 return NUM;
                               }
{identificador}                { sprintf(yylval.str, "%s", yytext);
                                 return FUNCION;
                               }
{blank}+		       { ; }
{linea}			       { lineno++; }
";"                            { return ';'  ;}
%%


int yywrap()  { return(1); }