Escolar Documentos
Profissional Documentos
Cultura Documentos
Elaborado por:
Balderas Avalos Maya Beln
Balanzar Hernndez Aurora Lucia
Morales Vera Ulices Elevi
Pgina
1
Tabla de contenido
Introduccin.......................................................................................................3
Autmata de palabra reservadas......................................................................4
Autmata de variables......................................................................................4
Autmata de operadores...................................................................................5
Cdigo del nuestro programa...........................................................................6
Manual.............................................................................................................20
Conclusin.......................................................................................................23
Pgina
2
Introduccin
Como bien sabemos, el analizador lxico es la primera fase de un compilador, el cual
identifica la sintaxis en tokens los cuales deben estar separados por espacios.
El analizado sintctico debe de identificar los tokens que forman parte de cada instruccin y
ver que estas estn correctamente escritas, para implementar esto es necesaria la utilizacin
de autmatas.
En esta ocasin podemos encontrar la explicacin adecuada de la implementacin de
nuestro propio lenguaje de programacin en el cual el propio deber validar los operadores,
palabras reservadas y variables, todo esto por medio de autmatas finitos deterministas,
tablas de transicin y pseudocdigo de cada uno.
Pgina
3
11
12
13
17
S
D
K
10
14
15
16
0
1
2
3
4
S
1
E
E
E
E
I
E
2
E
E
E
N
E
E
3
E
E
O
E
E
E
4
E
D
5
E
E
E
E
K
10
E
E
E
E
A
E
E
E
E
E
H
14
E
E
E
E
Pgina
4
C
E
E
E
E
E
E
E
E
E
E
E
R
E
E
E
E
E
FDC
E
E
A
E
A
18
5
6
7
8
9
10
11
12
13
14
15
16
17
18
E
E
E
E
E
E
12
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
7
E
E
E
E
E
E
E
E
E
E
E
E
6
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
8
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
11
E
E
E
15
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
16
E
E
E
E
E
E
9
E
E
E
13
E
E
E
17
E
E
E
E
E
E
E
E
E
E
E
E
E
E
18
E
E
E
E
E
A
E
E
E
A
E
E
E
E
A
Autmata de variables
Reglas para las variables:
1. Empezar con: $
Pgina
5
2.
3.
4.
5.
Letra
Letra seguida de n letras
Numero
Seguido de n nmeros
0
$
0
1
2
3
$
1
E
E
E
2
L
NUM
3
NUM
FDC
E
E
A
A
Pseudocdigo de variables
Repetir
Autmata de operadores
Operadores
+
Pgina
6
/
*
+, -, /, *
0
1
+
1
E
1
E
/
1
E
*
1
E
Pseudocdigo de operadores
Repetir
Leer el siguiente smbolo de entrada
Caso de smbolo
+:entrada:=+
-:entrada:=/:entrada:=/
*:entrada:=*
Fdc:entrada:= fdc
Fdc: salir
Estado = tabla(estado,entrada)
Si estadp=error entonce salir
Hasta estado= aceptar
Pgina
7
fdc
E
A
matriz_pal[3][2] = "E";
matriz_pal[3][3] = "4";
matriz_pal[3][4] = "E";
matriz_pal[3][5] = "E";
matriz_pal[3][6] = "E";
matriz_pal[3][7] = "E";
matriz_pal[3][8] = "E";
matriz_pal[3][9] = "E";
matriz_pal[3][10] = "E";
matriz_pal[3][11] = "E";
matriz_pal[4][0] = "E";
matriz_pal[4][1] = "E";
matriz_pal[4][2] = "E";
matriz_pal[4][3] = "E";
matriz_pal[4][4] = "E";
matriz_pal[4][5] = "E";
matriz_pal[4][6] = "E";
matriz_pal[4][7] = "E";
matriz_pal[4][8] = "E";
matriz_pal[4][9] = "E";
matriz_pal[4][10] = "E";
matriz_pal[4][11] = "A";
matriz_pal[5][0] = "E";
matriz_pal[5][1] = "E";
matriz_pal[5][2] = "E";
matriz_pal[5][3] = "6";
matriz_pal[5][4] = "E";
matriz_pal[5][5] = "E";
matriz_pal[5][6] = "E";
matriz_pal[5][7] = "E";
matriz_pal[5][8] = "E";
matriz_pal[5][9] = "E";
matriz_pal[5][10] = "E";
matriz_pal[5][11] = "E";
matriz_pal[6][0]
matriz_pal[6][1]
matriz_pal[6][2]
matriz_pal[6][3]
matriz_pal[6][4]
matriz_pal[6][5]
matriz_pal[6][6]
matriz_pal[6][7]
=
=
=
=
=
=
=
=
"E";
"E";
"7";
"E";
"E";
"E";
"E";
"E";
Pgina
10
matriz_pal[6][8] = "E";
matriz_pal[6][9] = "E";
matriz_pal[6][10] = "E";
matriz_pal[6][11] = "E";
matriz_pal[7][0] = "E";
matriz_pal[7][1] = "E";
matriz_pal[7][2] = "E";
matriz_pal[7][3] = "E";
matriz_pal[7][4] = "8";
matriz_pal[7][5] = "E";
matriz_pal[7][6] = "E";
matriz_pal[7][7] = "E";
matriz_pal[7][8] = "E";
matriz_pal[7][9] = "E";
matriz_pal[7][10] = "E";
matriz_pal[7][11] = "E";
matriz_pal[8][0] = "E";
matriz_pal[8][1] = "E";
matriz_pal[8][2] = "E";
matriz_pal[8][3] = "E";
matriz_pal[8][4] = "E";
matriz_pal[8][5] = "E";
matriz_pal[8][6] = "E";
matriz_pal[8][7] = "E";
matriz_pal[8][8] = "E";
matriz_pal[8][9] = "9";
matriz_pal[8][10] = "E";
matriz_pal[8][11] = "A";
matriz_pal[9][0] = "E";
matriz_pal[9][1] = "E";
matriz_pal[9][2] = "E";
matriz_pal[9][3] = "E";
matriz_pal[9][4] = "E";
matriz_pal[9][5] = "E";
matriz_pal[9][6] = "E";
matriz_pal[9][7] = "E";
matriz_pal[9][8] = "E";
matriz_pal[9][9] = "E";
matriz_pal[9][10] = "E";
matriz_pal[9][11] = "E";
matriz_pal[10][0] = "E";
Pgina
11
matriz_pal[10][1] = "E";
matriz_pal[10][2] = "E";
matriz_pal[10][3] = "E";
matriz_pal[10][4] = "E";
matriz_pal[10][5] = "E";
matriz_pal[10][6] = "11";
matriz_pal[10][7] = "E";
matriz_pal[10][8] = "E";
matriz_pal[10][9] = "E";
matriz_pal[10][10] = "E";
matriz_pal[10][11] = "E";
matriz_pal[11][0] = "12";
matriz_pal[11][1] = "E";
matriz_pal[11][2] = "E";
matriz_pal[11][3] = "E";
matriz_pal[11][4] = "E";
matriz_pal[11][5] = "E";
matriz_pal[11][6] = "E";
matriz_pal[11][7] = "E";
matriz_pal[11][8] = "E";
matriz_pal[11][9] = "E";
matriz_pal[11][10] = "E";
matriz_pal[11][11] = "E";
matriz_pal[12][0] = "E";
matriz_pal[12][1] = "E";
matriz_pal[12][2] = "E";
matriz_pal[12][3] = "E";
matriz_pal[12][4] = "E";
matriz_pal[12][5] = "E";
matriz_pal[12][6] = "E";
matriz_pal[12][7] = "E";
matriz_pal[12][8] = "E";
matriz_pal[12][9] = "13";
matriz_pal[12][10] = "E";
matriz_pal[12][11] = "E";
matriz_pal[13][0] = "E";
matriz_pal[13][1] = "E";
matriz_pal[13][2] = "E";
matriz_pal[13][3] = "E";
matriz_pal[13][4] = "E";
matriz_pal[13][5] = "E";
matriz_pal[13][6] = "E";
matriz_pal[13][7] = "E";
Pgina
12
matriz_pal[13][8] = "E";
matriz_pal[13][9] = "E";
matriz_pal[13][10] = "E";
matriz_pal[13][11] = "A";
matriz_pal[14][0] = "E";
matriz_pal[14][1] = "E";
matriz_pal[14][2] = "E";
matriz_pal[14][3] = "E";
matriz_pal[14][4] = "E";
matriz_pal[14][5] = "E";
matriz_pal[14][6] = "15";
matriz_pal[14][7] = "E";
matriz_pal[14][8] = "E";
matriz_pal[14][9] = "E";
matriz_pal[14][10] = "E";
matriz_pal[14][11] = "E";
matriz_pal[15][0] = "E";
matriz_pal[15][1] = "E";
matriz_pal[15][2] = "E";
matriz_pal[15][3] = "E";
matriz_pal[15][4] = "E";
matriz_pal[15][5] = "E";
matriz_pal[15][6] = "E";
matriz_pal[15][7] = "E";
matriz_pal[15][8] = "16";
matriz_pal[15][9] = "E";
matriz_pal[15][10] = "E";
matriz_pal[15][11] = "E";
matriz_pal[16][0] = "E";
matriz_pal[16][1] = "E";
matriz_pal[16][2] = "E";
matriz_pal[16][3] = "E";
matriz_pal[16][4] = "E";
matriz_pal[16][5] = "E";
matriz_pal[16][6] = "E";
matriz_pal[16][7] = "E";
matriz_pal[16][8] = "E";
matriz_pal[16][9] = "17";
matriz_pal[16][10] = "E";
matriz_pal[16][11] = "E";
matriz_pal[17][0] = "E";
matriz_pal[17][1] = "E";
matriz_pal[17][2] = "E";
matriz_pal[17][3] = "E";
matriz_pal[17][4] = "E";
Pgina
13
matriz_pal[17][5] = "E";
matriz_pal[17][6] = "E";
matriz_pal[17][7] = "E";
matriz_pal[17][8] = "E";
matriz_pal[17][9] = "E";
matriz_pal[17][10] = "18";
matriz_pal[17][11] = "E";
matriz_pal[18][0] = "E";
matriz_pal[18][1] = "E";
matriz_pal[18][2] = "E";
matriz_pal[18][3] = "E";
matriz_pal[18][4] = "E";
matriz_pal[18][5] = "E";
matriz_pal[18][6] = "E";
matriz_pal[18][7] = "E";
matriz_pal[18][8] = "E";
matriz_pal[18][9] = "E";
matriz_pal[18][10] = "E";
matriz_pal[18][11] = "A";
//matriz de las vairables
matriz_var[0][0] = "1";
matriz_var[0][1] = "E";
matriz_var[0][2] = "E";
matriz_var[0][3] = "E";
matriz_var[1][0] = "E";
matriz_var[1][1] = "2";
matriz_var[1][2] = "E";
matriz_var[1][3] = "E";
matriz_var[2][0] = "E";
matriz_var[2][1] = "2";
matriz_var[2][2] = "3";
matriz_var[2][3] = "A";
matriz_var[3][0] = "E";
matriz_var[3][1] = "E";
matriz_var[3][2] = "3";
matriz_var[3][3] = "A";
//matriz de los operadores
matriz_oper[0][0] = "1";
matriz_oper[0][1] = "1";
matriz_oper[0][2] = "1";
matriz_oper[0][3] = "1";
matriz_oper[0][4] = "E";
matriz_oper[1][0] = "E";
matriz_oper[1][1] = "E";
Pgina
14
matriz_oper[1][2] = "E";
matriz_oper[1][3] = "E";
matriz_oper[1][4] = "A";
//arreglo para evaluar las letras en el primer digito
a_z = new char[27];
//Arreglo de letras
a_z[0] = 'a';
a_z[1] = 'b';
a_z[2] = 'c';
a_z[3] = 'd';
a_z[4] = 'e';
a_z[5] = 'f';
a_z[6] = 'g';
a_z[7] = 'h';
a_z[8] = 'i';
a_z[9] = 'j';
a_z[10] = 'k';
a_z[12] = 'l';
a_z[13] = 'm';
a_z[14] = 'n';
a_z[15] = 'o';
a_z[16] = 'p';
a_z[17] = 'q';
a_z[18] = 'r';
a_z[19] = 's';
a_z[20] = 't';
a_z[21] = 'u';
a_z[22] = 'v';
a_z[23] = 'w';
a_z[24] = 'x';
a_z[25] = 'y';
a_z[26] = 'z';
}
//varables de codigo para cargar el archivo de bloc de notas
String lectura = "", texto = "";
File fi;
//Mtodo para leer el bloc de notas
void leer_archivo() {
javax.swing.JFileChooser obj1 = new javax.swing.JFileChooser();
FileNameExtensionFilter filtrando = new FileNameExtensionFilter("txt", "txt");
obj1.setFileFilter(filtrando);
obj1.showOpenDialog(obj1);
String direccion_archivo = obj1.getSelectedFile().getAbsolutePath();
fi = new File(direccion_archivo);
try {
Pgina
15
case 's':
entrada =
break;
case 'i':
entrada =
break;
case 'n':
entrada =
break;
case 'o':
entrada =
break;
case 'd':
entrada =
break;
case 'k':
entrada =
break;
case 'a':
entrada =
break;
case 'h':
entrada =
break;
case 'c':
entrada =
break;
case 'e':
entrada =
break;
case 'r':
entrada =
break;
case ' ':
entrada =
break;
default:
Error = 1;
x= inic;
break;
0;
1;
2;
3;
4;
5;
6;
7;
8;
9;
10;
11;
}
if (Error == 1) {
x =inic;
break;
}
Pgina
17
estado = matriz_pal[Integer.parseInt(estado)][entrada];
if (estado.equals("E")) {
Error = 1;
break;
}
x = x + 1;
} while (!estado.equals("A"));
//AUTMATA DE VARIABLES
if (Error == 1 || estado.equals("E"))
{
estado = "0";
entrada = 0;
Error = 0;
do {
//INICIA AUTMATA DE VARIABLES
switch (cad.charAt(x)) {
case '$':
entrada = 0;
break;
case '0':
entrada = 2;
break;
case '1':
entrada = 2;
break;
case '2':
entrada = 2;
break;
case '3':
entrada = 2;
break;
case '4':
entrada = 2;
break;
case '5':
entrada = 2;
break;
case '6':
entrada = 2;
break;
case '7':
entrada = 2;
break;
case '8':
Pgina
18
entrada
break;
case '9':
entrada
break;
case 'a':
entrada
break;
case 'b':
entrada
break;
case 'c':
entrada
break;
case 'd':
entrada
break;
case 'e':
entrada
break;
case 'f':
entrada
break;
case 'g':
entrada
break;
case 'h':
entrada
break;
case 'i':
entrada
break;
case 'j':
entrada
break;
case 'k':
entrada
break;
case 'l':
entrada
break;
case 'm':
entrada
break;
case 'n':
= 2;
= 2;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
Pgina
19
entrada
break;
case 'o':
entrada
break;
case 'p':
entrada
break;
case 'q':
entrada
break;
case 'r':
entrada
break;
case 's':
entrada
break;
case 't':
entrada
break;
case 'u':
entrada
break;
case 'v':
entrada
break;
case 'w':
entrada
break;
case 'x':
entrada
break;
case 'y':
entrada
break;
case 'z':
entrada
break;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
= 1;
Error = 1;
x = inic;
break;
}
estado = matriz_var[Integer.parseInt(estado)][entrada];
if (estado.equals("E"))
{
Error = 1;
x = inic;
break;
}
if (Error == 1)
{
break;
}
x = x + 1;
} while (!estado.equals("A"));
}
if (Error == 1 || estado.equals("E"))
{
estado = "0";
entrada = 0;
Error = 0;
do {
//INICIA AUTMATA DE VARIABLES
switch (cad.charAt(x)) {
case '+':
entrada = 0;
break;
case '-':
entrada = 1;
break;
case '*':
entrada = 2;
break;
case '/':
entrada = 3;
break;
case ' ':
entrada = 4;
break;
default:
Error = 1;
Pgina
21
break;
}
estado = matriz_oper[Integer.parseInt(estado)][entrada];
if (estado.equals("E")) {
Error = 1;
break;
}
if (Error == 1)
{
break;
}
x = x + 1;
} while (!estado.equals("A"));
}
if (Error == 1 || estado.equals("E"))
{
Error = 0;
x = posicion + 1;
mandar = mandar + "\n" + cad.substring(inic, fin);
errores.setText(mandar );
}
posicion = fin + 1;
Error = 0;
}
if (errores.getText().equals(""))
{
JOptionPane.showMessageDialog(this, "Cadena vlida ");
}
else
{
JOptionPane.showMessageDialog(this, "Cadena invlida");
}}
Manual
El botn Open File permite encontrar la ruta de nuestro archivo .txt como se muestra las dos
figuras:
Pgina
22
Pgina
23
Abriendo el archivo automticamente se coloca el contenido del archivo.txt dentro del campo
de texto en el rea rosada.
Pgina
24
En caso de que nuestro analizador rechace la cadena se deber de mandar a imprimir dentro
del rea de texto el token que no sea aceptado como se muestra a continuacin.
Tambin ha sido anexado un botn adicional que nos sirve nicamente para borrar las letras
donde ha sido insertada la cadena del bloc de notas y tambin borra las palabras errneas
en el cuadro de palabras no validas por el autmata los campos en el cuadro de texto.
Pgina
25
Conclusin
Pgina
26
Pgina
27