COMPIL_C.LEX



/* GENERAR PSEUDOCODIGO INTERMEDIO DE C */
/*
   --------------------------------------------------
   ---   Programa: com.lex                        ---
   ---   TEcnica:  dirigida por la sintAxis       ---
   ---   Objetivo: reconocer palabras clave       ---
   ---             del lenguaje c                 ---
   ---   Recibe:   un archivo con cOdigo c        ---
   ---   Regresa:  la aceptacion o rechazo del    ---
   ---             cOdigo fuente c                ---
   ---   Programador: J. Rafael R. Ochoa          ---
   --------------------------------------------------
*/

%{
   #include "y_tab.h"
   extern int n_lines, flag, fun;
   char car1,car2;
%}

st			[ \t]
linea			[\n]
blank			({st})
let			[a-zA-Z]
dig_pos			[1-9]
dig			[0-9]
sec_dig			({dig_pos}{dig}*)
numero			({sec_dig}|[0])
let_dig			[a-zA-Z0-9_]
frase			({let}+{let_dig}*|{blank})
texto			({let}+{let_dig}*)
/*texto			({frase}+)*/

%%
"//"			{ while(getc(yyin) != '\n'); }
"/*"			{ while(1)
			     car1 = getc(yyin);
			     if(car1 == '*')
			       if(getc(yyin) == '/')
			          break;			     
			}
"\""			{ return COMILLA; }
"'"			{ return APOSTROFE; }
"\\"			{ return DIAGONAL; }
"."			{ return PUNTO; }
";"			{ return PUNTO_COMA; }
","			{ return COMA; }
"{"			{ return L_LLAVE; }
"}"			{ return R_LLAVE; }
"("			{ return L_PARENT; }
")"			{ return R_PARENT; }
"["			{ return L_CUADRO; }
"]"			{ return R_CUADRO; }
">"			{ return MAYOR; }
"<"			{ return MENOR; }
"<="			{ return MENOR_IGUAL; }
">="			{ return MAYOR_IGUAL; }
"=="			{ return IDENTICO; }
"="			{
			   if(flag) { strcpy(yylval.str, "="); return TEXTO; }
			   return ASIGNA;
			}
"||"			{ return OR; }
"&&"			{ return AND; }
"!="                    { return NOT_EQ; }
"!"                     {
			   if(flag) { strcpy(yylval.str, "!"); return TEXTO; }
			   return NOT;
			}
"#"                     { return GATO; }
"&"                     { return AMPER; }
"+"			{ return MAS; }
"-"			{ return MENOS; }
"/"			{ return DIV; }
"%d"			{
			   strcpy(yylval.str, "f_int"); 
			   return TEXTO;
			}
"%s"			{
			   strcpy(yylval.str, "f_cad"); 
			   return TEXTO;
			}
"%c"			{ 
			   strcpy(yylval.str, "f_car"); 
			   return TEXTO;
			}
"\\n"			{
			   strcpy(yylval.str, "f_lin"); 
			   return F_LIN;
			}
"return"		{ return RETURN; }
"include"		{ return INCLUDE; }
"define"		{ return DEFINE; }

"while"			{ return WHILE; }
"for"			{ return FOR; }

"printf"		{ return PRINTF; }
"puts"			{ return PUTS; }

"gets"			{ return GETS; }
"scanf"			{ return SCANF; }
"fflush"		{ return FFLUSH; }
"stdout"		{ return STDOUT; }

"if"			{ return IF; }
"else"			{ return ELSE; }

"void"			{ return VOID; }
"int"			{ return INT; }
"char" 			{ return CHAR; }
"char *"		{ return CAD; }
"*"			{ return ASTER; }
{linea}			{ n_lines++; }

{numero}		{ sprintf(yylval.str, "%s",yytext); return NUM; }
{texto}			{ sprintf(yylval.str, "%s",yytext); return TEXTO; }

.			{ ;/*elimina lo raro*/ }
%%

int yywrap()  { return(1); }