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