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