Upload
dennis-stevens
View
207
Download
6
Embed Size (px)
Citation preview
UNIVERSIDAD AUTÓNOMA DE TLAXCALA.
FACULTAD DE CIENCIAS BÁSICAS, INGENIERÍA Y TECNOLOGÍA
ANALIZADOR LÉXICO
PROYECTO PRESENTADO POR:
DAVID ACOLTZI CUATECONTZI
ANJELLO CANO CONDE.
ANDRÉS VILLEGAS RODRÍGUEZ.
IVÁN LÓPEZ RAFAEL.
JUAN ALBERTO JUÁREZ AYAPANTECATL.
ERNESTO SERRANO MARTÍNEZ.
ARTURO ESPINOSA HERNÁNDEZ.
2012
Contenido Analizador léxico. ............................................................................................................................. 3
Analizador sintáctico (parser). ................................................................................................... 3
Derivaciones .................................................................................................................................. 3
Función de la aplicación: ................................................................................................................. 4
Ejemplo 1: .......................................................................................................................................... 4
Ejemplo 2: .......................................................................................................................................... 5
Analizador léxico.
Analizador léxico (scanner): lee la secuencia de caracteres del programa fuente, caracter a
caracter, y los agrupa para formar unidades con significado propio, los componentes léxicos
(tokens en inglés). Estos componentes léxicos representan:
Palabras reservadas: if, while, do, . . .
Identificadores: asociados a variables, nombres de funciones, tipos definidos por el
usuario, etiquetas,... Por ejemplo: posición, velocidad, tiempo, . . .
Operadores: = * + - / == > < & ! = . . .
Símbolos especiales: ; ( ) [ ] f g ...
Constantes numéricas: literales que representan valores enteros, en coma flotante,
etc, 982, 0xF678, -83.2E+2,...
Constantes de caracteres: literales que representan cadenas concretas de caracteres,
“hola mundo",...
El analizador léxico opera bajo petición del analizador sintáctico devolviendo un
componente léxico conforme el analizador sintáctico lo va necesitando para avanzar en la
gramática. Los componentes léxicos son los símbolos terminales de la gramática.
Suele implementarse como una subrutina del analizador sintáctico. Cuando recibe la
orden obtienen el siguiente componente léxico, el analizador léxico lee los caracteres de
entrada hasta identificar el siguiente componente léxico.
Analizador sintáctico (parser).
Un analizador sintáctico (parser), se encarga de determinar si un string de símbolos
(tokens) es aceptado por las reglas de producción definidas en una gramática dada.
Al momento de analizar un string de entrada, es útil la construcción de un árbol sintáctico.
Derivaciones
La idea central es que se considera una producción como una regla de reescritura, donde
el no terminal de la izquierda es sustituido por la cadena del lado derecho de la
producción.
- Derivación por la izquierda: Derivación donde solo el no terminal de más a la izquierda
de cualquier forma de frase se sustituye en cada paso.
- Derivación por la derecha o Derivación canónica: Derivación donde el no terminal más a
la derecha se sustituye en cada paso.
De un modo más formal:
Función de la aplicación:
La aplicación presentada muestra la derivación de una expresión ingresada por el usuario
de la cual se desplegará el resultado en consola, este resultado mostrara las operaciones en
el orden en que fueron realizadas.
Ejemplo 1:
Para comenzar, la aplicación pide al usuario una expresión, la cual será derivada.
En este primer ejemplo la expresión es: (5+(3-2))-5
Al presionar Aceptar mostrara en consola el resultado, como se aprecia en la imagen,
donde se muestra:
1. Expresión inicial (expresión ingresada por el usuario): “(5+(3-2))-5”.
2. Primer operación realizada: “3-2”, esta operación se realiza al principio porque es
la mas interna.
3. Resultado de la primera operación: “1”.
4. Al obtener el resultado de la operación anterior obtenemos una segunda expresión
con nuevos parámetros: “(5+1)-5”.
5. La siguiente operación a realizar es la suma de 5+1 puesto que por orden de
prioridad le corresponde dicha operación.
6. Resultado de la operación interna de “5+1”: 6.
7. Ahora tenemos una nueva expresión: 6-5, estos números corresponden a los
resultados de las operaciones anteriores.
8. Resultado de la operación “6-5” = 1.
9. Al obtener este último resultado obtenemos el resultado de la expresión final = 1.
En la demostración las partes que principales y de mayor interés son: “Expresión inicial”,
“Nueva expresión” y “Expresión final”.
Ejemplo 2:
La aplicación pide al usuario una expresión que será derivada.
Ingresamos la expresión inicial.
El resultado es el siguiente:
En este ejemplo muestra:
1. Expresión inicial (expresión ingresada por el usuario): “(5+(3+4))-2-5”.
2. Primer operación realizada: “3+4”, esta operación es la primera que se realiza al ser
la mas interna.
3. Resultado de la primera operación: “7”.
4. Al obtener el resultado de la operación anterior obtenemos una nueva expresión
con nuevos parámetros: “(5+7)-2-5”.
5. La siguiente operación a realizar es la suma de 5+7 según la aplicación.
6. Resultado de la operación interna de “5+7”: 12.
7. Ahora tenemos una nueva expresión: 12-2-5, estos números corresponden a los
resultados de las operaciones anteriores.
8. El resultado de la operación anterior se define de izquierda a derecha puesto que
ambos operadores son iguales: 5.
9. Al obtener este último resultado obtenemos el resultado de la expresión final: 5.
Al igual que en el ejemplo anterior las partes de mayor interés son: “Expresión inicial”,
“Nueva expresión” y “Expresión final”.