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