Analisis sintactico

Solo disponible en BuenasTareas
  • Páginas : 9 (2076 palabras )
  • Descarga(s) : 7
  • Publicado : 1 de junio de 2010
Leer documento completo
Vista previa del texto
PROGRAMACION DE SISTEMAS I
UNIDAD IV. ANALISIS SINTACTICO
(Primera parte)

Todo lenguaje de programación tiene reglas que prescriben la estructura sintáctica de programas bien formados, p. ej., en Pascal, un programa se compone de bloques, un bloque de proposiciones, una proposición de expresiones, una expresión de componentes léxicos, y éstos de caracteres.

Se puede describir lasintaxis de las construcciones de los lenguajes de programación por medio de gramáticas independientes de contexto.

Las gramáticas ofrecen ventajas significativas a los diseñadores de lenguajes y a los escritores de compiladores:

1) Una gramática da una especificación sintáctica y fácil de entender de un lenguaje de programación.
2) A partir de algunas clases de gramáticas sepuede construir automáticamente un analizador sintáctico eficiente que determine si un programa fuente está sintácticamente bien formado.
3) Otra ventaja es que el analizador sintáctico puede revelar ambigüedades sintácticas y otras construcciones difíciles de analizar que de otro modo podrían pasar sin detectar en la fase inicial de diseño de un lenguaje y de su compilador.
4) Una gramáticadiseñada adecuadamente imparte una estructura a un lenguaje de programación útil para la traducción de programas fuentes a código objeto correcto y para la detección de errores.
5) Los lenguajes evolucionan con el tiempo, adquiriendo nuevas construcciones y realizando tareas adicionales. Estas nuevas construcciones se pueden añadir con más facilidad a un lenguaje cuando existe una aplicaciónbasada en una descripción gramatical.

El análisis sintáctico obtiene una cadena de componentes léxicos del analizador léxico y comprueba si la cadena puede ser generada por la gramática del lenguaje fuente, se supone que el analizador sintáctico informará de cualquier error de sintaxis de manera inteligible. También debería recuperarse de los errores que ocurren frecuentemente para podercontinuar procesando el resto de su entrada.

Los métodos empleados generalmente en los compiladores se clasifican como ascendentes y descendentes.

Los analizadores sintácticos descendentes construyen árboles desde la raíz hasta las hojas, mientras que los analizadores sintácticos ascendentes comienzan en las hojas y suben hacia la raíz. En ambos casos examina la entrada al analizadorsintáctico de izquierda a derecha, uno a la vez.

Los métodos ascendente y descendente más eficientes trabajan sólo con subclases de gramáticas, pero varias de estas subclases, como las gramáticas LL y LR, son lo suficientemente expresivas para describir la mayoría de las construcciones sintácticas de los lenguajes de programación.

NOTA: Se asume que la salida de un analizador sintáctico es unarepresentación del árbol de análisis sintáctico para la cadena de componentes léxicos producida por el analizador léxico.

Manejo de errores sintácticos

Si un compilador tuviera que procesar sólo programas correctos, su diseño e implementación se simplificarían mucho. Pero los programadores a menudo escriben programas incorrectos, y un buen compilador debería ayudar al programador aidentificar y localizar errores.

La mayoría de las especificaciones de los lenguajes de programación no describen cómo debe responder un compilador a los errores; la respuesta se deja al diseñador del compilador.

Considerar desde el principio el manejo de errores puede simplificar la estructura de un compilador y mejorar su respuesta a los errores.

P. ej., los errores que pueden contenerlos programas son de diversos tipos:
|
a) Léxicos: como escribir mal un número, un identificador o un operador
b) Sintácticos: como una expresión aritmética con paréntesis no equilibrados
c) Semánticos: como un operador aplicado a un operando incompatible
d) Lógico: como una llamada infinitamente recursiva

Gran parte de la detección y recuperación de...
tracking img