Compiladores analisis lexico
-
Upload
jhampierpiedra -
Category
Documents
-
view
148 -
download
0
Transcript of Compiladores analisis lexico
ESCUELA DE INGENIERIA- SISTEMAS COMPILADORES
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR
SEDE IBARRA
Nombre: Jhampier Piedra
ACTIVIDAD DIRIGIDA:
Para mejorar y optimizar recursos pedagógicos vamos a investigar los siguientes temas:
El analizador sintáctico.( Ojo no más de 6 páginas)
El papel del analizador sintáctico
Análisis sintáctico ascendente y descendente
Análisis semántico y tratamiento de errores
Árboles Sintácticos
El papel del analizador sintáctico es:
Comprobar que la secuencia de componentes léxicos cumple las reglas de la
gramática.
convierte el texto de entrada en otras estructuras (comúnmente árboles).
Análisis sintáctico ascendente y descendente
La tarea esencial de un analizador es determinar si una determinada entrada puede ser
derivada desde el símbolo inicial, usando las reglas de una gramática formal, y como
hacer esto, existen esencialmente dos formas:
Analizador sintáctico descendente (Top-Down-Parser):
Un analizador puede empezar con el símbolo inicial e intentar transformarlo en la
entrada, intuitivamente esto sería ir dividiendo la entrada progresivamente en partes
cada vez más pequeñas, de esta forma funcionan los analizadores LL, un ejemplo es
el javaCC.
Analizador sintáctico ascendente (Bottom-Up-Parser):
Un analizador puede empezar con la entrada e intentar llegar hasta el símbolo inicial,
intuitivamente el analizador intenta encontrar los símbolos más pequeños y
progresivamente construir la jerarquía de símbolos hasta el inicial, los analizadores LR
funcionan así y un ejemplo es el Yacc.
Análisis semántico y tratamiento de errores.
La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores
semánticos y reúne la información sobre los tipos para la fase posterior de generación
ESCUELA DE INGENIERIA- SISTEMAS COMPILADORES
de código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis
sintáctico para identificador los operadores y operandos de expresiones y proposiciones.
Clasificación
Dinámica: Aspectos que solo pueden ser conocidos en tiempos de ejecución.
Estática: Aspectos que solo pueden ser controlados en tiempo de compilación.
Verificación de Tipos: el compilador verifica si cada operador tiene operandos
permitidos por la especificación del lenguaje fuente.
TRATAMIENTO DE ERRORES
Los errores encontrados en las distintas fases de análisis se envían a un módulo
denominado manejo de errores. En el caso más sencillo puede ser un subprograma al
que se le invoca enviándole el código de error, y que se encarga de escribir un mensaje
con el error correspondiente, y el número de línea donde se ha producido, así como de
cortar el proceso de traducción.
TIPOS DE ERRORES
Tipos de errores que suelen ocurrir (dependiendo de la fase):
Léxicos: No concuerda con ninguna ER.
Ejemplo: escribir mal una palabra clave
Sintácticos: La estructura que se ha seguido no es correcta.
Ejemplo: expresión con paréntesis no emparejados
Semánticos: La estructura está bien pero hay errores de significado
Ejemplo: operador y operandos incompatibles.
Lógicos: Los comete el programador
Ejemplo: una llamada infinitamente recursiva
Árboles Sintácticos
Es una clase especial de árbol, se le denomina Árbol Sintáctico es una forma
condensada de un árbol de análisis sintáctico, útil para representar instrucciones de
lenguajes. Un árbol sintáctico permite demostrar que una secuencia de caracteres es
una determinada categoría sintáctica. Llevan su nombre en base a la función que
cumple, donde cada nodo representa una operación y los hijos de un nodo son los
argumentos de la operación.
ESCUELA DE INGENIERIA- SISTEMAS COMPILADORES
Un árbol sintáctico puede cumplir tres funciones diferentes:
Comprobar el orden en que llegan los tokens (componente léxico es una cadena
de caracteres)
Construir una representación del programa fuente.
Si es sintácticamente correcto generar el error
Un Árbol Sintáctico bien realizado se caracteriza por ser una representación
abstracta que va desde las sub-categorías hasta la categoría general, por constar
de operadores en nodos no terminales y operandos en nodos terminales.