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
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:
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]);}
%%
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
Pgina 4 de
b)
SALIDA:
c)
Colocando la regla que reconoce los identificadores en primer lugar.
SALIDA:
Pgina 5 de
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]);}
Pgina 6 de
%%
SALIDA:
Pgina 7 de