类别 全部 - lenguaje - gramáticas - sintaxis - análisis

作者:Kerly Denisse Calle Valverde 4 年以前

786

ANÁLISIS SINTÁCTICO

Un generador de analizadores sintácticos es un programa que recibe una especificación de la sintaxis de un lenguaje y produce un procedimiento para analizarlo. Existen varios tipos de análisis sintáctico, principalmente los descendentes, que parten del axioma inicial y derivan hacia la izquierda hasta reconocer una sentencia.

ANÁLISIS SINTÁCTICO

Generador del Análisis

Un generador de analizadores sintácticos es un programa que toma como su entrada una especificación de la sintaxis de un lenguaje en alguna forma, y produce como su salida un procedimiento de análisis sintáctico para ese lenguaje

TIPOS
Ascendente

Parten de la sentencia de entrada, y van aplicando reglas de producción hacia atrás (desde el consecuente hasta el antecedente), hasta llegar al axioma inicial. estos pueden ser:

LR(1)

la “L” es por el examen de la entrada de izquierda a derecha (en inglés, left-to-right), la “R” por construir una derivación por la derecha (en inglés, rightmost derivation) en orden inverso, y la k por el número de símbolos de entrada de examen por anticipado utilizados para tomar las decisiones del análisis sintáctico. Cuando se omite, se asume que k, es 1

inconvenientes

El principal inconveniente del método es que supone demasiado trabajo construir un analizador sintáctico LR a mano para una gramática de un lenguaje de programación típico. Se necesita una herramienta especializada - un generador de analizadores sintácticos LR

es atractivo por varias razones:

- El método de funcionamiento de estos analizadores posee la ventaja de localizar un error sintáctico en el mismo instante que se produce con lo que se adquiere una gran eficiencia de tiempo de compilación frente a procedimientos menos adecuados como puedan ser los de retroceso.

- Pueden reconocer la inmensa mayoría de los lenguajes de programación que puedan ser generados mediante gramáticas de contexto-libre.

Aquí se construye el árbol sintáctico de abajo hacia arriba, lo cual disminuye el número de reglas mal aplicadas con respecto al caso descendente (si hablamos del caso con retroceso). Tanto si hay retroceso como si no, en un momento dado, la cadena de entrada estará dividida en dos partes:

Descendente

Parten del axioma inicial, y van efectuando derivaciones a izquierda hasta obtener la secuencia de derivaciones que reconoce a la sentencia. estos pueden ser

LL(1)

Es aquella en la que su tabla de chequeo de sintaxis no posee entradas múltiples, o sea, es suficiente con examinar sólo un símbolo a la entrada, para saber qué regla aplicar. Toda gramática reconocible mediante el método de los diagramas de Conway es LL(1)

Problemas

Este tipo de análisis tiene el inconveniente de que muy pocas gramáticas son LL(1), aunque muchas pueden traducirse a LL(1), tras un adecuado estudio.

El método consiste en seguir un algoritmo partiendo de:

- Una tabla asociada de forma unívoca a una gramática.

- Una pila de símbolos ( terminales y no terminales)

- La cadena a reconocer, junto con un apuntador, que nos indica cual es el token actual.

Con Recursión

Diagrama de Conway

Un diagrama de Conway es un grafo dirigido donde los elementos no terminales aparecen como rectángulos, y los terminales como círculos.

Una gramática de contexto libre puede expresar un lenguaje al igual que puede hacerlo la notación BNF, y los diagramas de Conway.

Con Retroceso

problemas

Este método no funciona con gramáticas recursivas a la izquierda, ya que puede ocurrir que entre en un bucle infinito. No existen muchos analizadores sintácticos con retroceso. En parte, porque casi nunca se necesita el retroceso para analizar sintácticamente las construcciones de los lenguajes de programación.

objetivo

El método parte del axioma inicial y aplica todas las posibles reglas al no terminal más a la izquierda.

DISEÑO DE GRAMÁTICA

Las restricciones aplicadas a la gramática dependeran del tipo de analizador sintáctico utilizado

S
Es la variable inicial de la gramática
P
Es el conjunto de reglas de producción de la forma
T
Es el conjunto de símbolos terminales de la gramática.
V
Es el conjunto de variables o símbolos no terminales de la gramática

MANEJO DE ERRORES

Sintaxis:

void yyerror( ){ //procesos a realizar }

Funcionalidad:

No debe retrasar de forma significativa el procesamiento de programas correctos.
Recuperarse de cada error con la suficiente rapidez como para detectar errores posteriores.
Informar de los errores con claridad y exactitud.

Manejo 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.
Un error de sintaxis se detecta cuando el analizador sintáctico espera un símbolo que no corresponde al que se acaba de leer

Aplicativos

Los motores de búsqueda de los navegadores web, usan el análisis sintáctico para las búsquedas de millones de personas.

Analiza las URL, para consistir si hay algún error.

Examinar archivos estructurados en XML.

Se usa en HTML para analizar la sintaxis de dichos programas web.

Se usa para la lectura de un lenguaje de programación sea Jaca, c++, c...etc.

Es un programa que normalmente es parte de un compilador. El compilador se asegura de que el código se traduce correctamente a un lenguaje ejecutable. La tarea del analizador es, en este caso, la descomposición y transformación de las entradas en un formato utilizable para su posterior procesamiento. Se analiza una cadena de instrucciones en un lenguaje de programación y luego se descompone en sus componentes individuales.

CONCEPTO:

ANÁLISIS SINTÁCTICO

PASOS A SEGUIR EN UN ANALIZADOR SINTÁCTICO:

PASO 5:
El analizador sintáctico para poder trabajar puede realizar dentro de su proceso una de las tres operaciones siguientes: - Aceptar : Cadena reconocida. - Rechazar : La entrada no es válida. - Reducir : Aplicar una regla de producción a los elementos de (A).
PASO4:
Se genera el arbol sintactico
PASO3:
Aplicando una regla al revés ahora A es F
PASO 2:
En el comienzo del análisis sintáctico consumimos el primer token. A -> F <-id ; B-> +id+id
PASO 1:
Tanto si hay retroceso como si no, en un momento dado, la cadena de entrada estará dividida en dos partes A y B B: El trozo de la cadena de entrada (secuencia de tokens) por reconocer. Vamos consumiendo tokens, y todos los tokens que nos queden por consumir constituyen B. A: coincidirá siempre con el resto de la cadena de entrada, trozo al que se habrán aplicado algunas reglas de producción, en sentido inverso. e=> A B=> id+id+id id=> A B=> +id+id

Existen 2 estrategias para construir un árbol sintàctico

ANALISIS ASCENDENTE
Partiendo de la cadena de entrada se construye el árbol de análisis sintáctico empezando por las hojas y se y se va creando nodos intermedios hasta llegar a la raíz
ANALISS DESCENDENTE
Se parte de la raìz del árbol y se va aplicando reglas por la izquierda de forma que se obtiene una derivación por la izquierda de la cadena de entrada

CARACTERÍSTICAS

No debe retrasar de manera significativa el procesamiento de programas correctos.
Se debe recuperar de cada error con la suficiente rapidez como para detectar errores posteriores.
Debe informar de la presencia de errores con claridad y exactitud

Tiene como función principal:

Identificar cada tipo de instruccion y sus componentes
completar la tabla de simbolo s.

realizar comprobaciones estaticas y dinamicas