Você está na página 1de 8

Compiladores

Anlisis Lxico

Grupo N: 5
Guanca, Jorge Daniel Antonio. 6770. 37094295. Ing.
Informtica.
Prez, Ricardo Daniel. 6590. 36225295. Ing. Informtica.
Ramos, Abel Armando. 6459. 37104877. Ing. Informtica.
Ramos, Pablo Nicols. 6969. 35309435. Ing. Informtica.
Quispe, Jairo Joel. 6297. 34912244. Ing. Informtica.

Ejercicio 1:
TABLA:
LEXEMA

PATRON

TOKEN

program

program

PR_PROGRAM

function

function

PR_FUNCTION

integer

integer

PR_INTEGER

var

var

PR_VAR

return

return

PR_RETURN

begin

begin

PR_BEGIN

end

end

PR_END

[a-zA-z][a-zA-Z0-9]*

IDENTIFICADOR

[0-9]+

NUMERO

:=

:=

OP_ASIGNACION

OP_PRODUCTO

OP_SUMA

SI_PUNTO_COMA

SI_PAR_IZQUIERDO

SI_COMA

SI_DOS_PUNTOS

SI_PAR_DERECHO

SI_LLAVE_IZQUIERDA

SI_LLAVE_DERECHA

SI_PUNTO

problema2
F2
uno
dos
F1
a
b
c
d
5
10
3
4
1

Guanca, Prez, Ramos, Ramos, Quispe

Pgina 1 de

ANALEX.L:
%{
#include <stdio.h>
%}
blanco " "|\n|\t
letra [a-zA-Z]
digito [0-9]
identificador {letra}({digito}|{letra})*
numero {digito}+
%%
{blanco}*
{printf(" ");}
"program"
{printf("PROGRAM");}
"function"
{printf("FUNCTION");}
"integer"
{printf("INTEGER");}
"var"
{printf("VAR");}
"return"
{printf("RETURN");}
"begin"
{printf("BEGIN");}
"end"
{printf("END");}
{identificador}
{printf("IDENTIFICADOR");}
{numero}
{printf("NUMERO");}
":="
{printf(":=");}
"*"
{printf("*");}
"+"
{printf("+");}
";"
{printf(";");}
"("
{printf("(");}
","
{printf(",");}
":"
{printf(":");}
")"
{printf(")");}
"{"
{printf("{");}
"}"
{printf("}");}
"."
{printf(".");}
.
{printf("%c",yytext[0]);}
%%
SALIDA:

Guanca, Prez, Ramos, Ramos, Quispe

Pgina 2 de

Ejercicio 2:
ANALEX.L:
%{
#include <stdio.h>
%}
blanco " "
saltoLinea \n
tabulacion \t
letra [a-zA-Z]
digito [0-9]
identificador {letra}({digito}|{letra})*
numero {digito}+
%%
{blanco}
{printf(" ");}
{saltoLinea}
{printf("\n");}
{tabulacion}
{printf("\t");}
"program"
{printf("PROGRAM");}
"function"
{printf("FUNCTION");}
"integer"
{printf("INTEGER");}
"var"
{printf("VAR");}
"return"
{printf("RETURN");}
"begin"
{printf("BEGIN");}
"end"
{printf("END");}
{identificador}
{printf("%s",yytext);}
{numero}
{printf("NUMERO");}
":="
{printf(":=");}
"*"
{printf("*");}
"+"
{printf("+");}
";"
{printf(";");}
"("
{printf("(");}
","
{printf(",");}
":"
{printf(":");}
")"
{printf(")");}
"{"
{printf("{");}
"}"
{printf("}");}
"."
{printf(".");}
.
{printf("%c",yytext[0]);}
%%

Guanca, Prez, Ramos, Ramos, Quispe

Pgina 3 de

SALIDA:

Ejercicio 3:
a)
TABLA:
LEXEMA

PATRON

TOKEN

if

if

PR_IF

else

else

PR_ELSE

while

while

PR_WHILE

void

void

PR_VOID

[a-zA-z][a-zA-Z0-9]*

IDENTIFICADOR

[0-9]+

NUMERO

x1
Y
a
Resultado
11
10
9
3

Guanca, Prez, Ramos, Ramos, Quispe

Pgina 4 de

b)
SALIDA:

c)
Colocando la regla que reconoce los identificadores en primer lugar.
SALIDA:

Guanca, Prez, Ramos, Ramos, Quispe

Pgina 5 de

Colocando la regla del . en primer lugar.


SALIDA:

CONCLUSION: colocando la regla del identificador en primer lugar reconoce a todas las
entradas de carcter como identificadores (incluyendo main y a). Colocando la regla del .
en primer lugar reconoce a todas las entradas de carcter como cualquier carcter y lo imprime
tal cual es (incluyendo a y el nmero 1). Esto se debe a dos razones, si dos expresiones
regulares reconocen en la entrada un prefijo de igual longitud, se ejecuta siempre la accin
asociada a la primera expresin regular escrita. Adems cuando se presentan varias
posibilidades a la hora de procesar la entrada, se opta siempre por aquella que reconozca una
palabra de mayor longitud.

Ejercicio 4:
ANALEX.L:
%{
#include <stdio.h>
%}
blanco " "
saltoLinea \n
tabulacion \t
letra [a-zA-Z]
digito [0-9]
ident {letra}({digito}|{letra})*
numero {digito}+
%%
{blanco}
{printf(" ");}
{saltoLinea}
{printf("\n");}
{tabulacion}
{printf("\t");}
"if" {printf(" IF ");}
"else" {printf(" ELSE ");}
"while" {printf(" WHILE ");}
"void" {printf(" VOID ");}
{ident} {printf(" %s ",yytext);}
{numero} {printf(" NUMERO ");}
. {printf(" %c ",yytext[0]);}

Guanca, Prez, Ramos, Ramos, Quispe

Pgina 6 de

%%
SALIDA:

Guanca, Prez, Ramos, Ramos, Quispe

Pgina 7 de