compiladores analisis lexico

3
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

Upload: jhampierpiedra

Post on 24-Jul-2015

147 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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

Page 2: Compiladores analisis lexico

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.

Page 3: Compiladores analisis lexico

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.