lunes, 20 de febrero de 2017

Análisis Sintáctico.


Análisis Sintáctico.


Determina si la secuencia de componentes léxicos sigue la estructura del lenguaje y obtiene la estructura jerárquica en forma de árbol, donde los modos son las construcciones de alto nivel de lenguaje.
Se determinan las relaciones estructurales entre los componentes léxicos, esto es semejante a realizar el análisis gramatical sobre una fase del lenguaje natural
La estructura sintáctica, se define entre las gramáticas independientes del con texto

Clasificación:
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í


ACTIVIDAD: DOS CONCEPTOS MAS DE ANALIZADOR LÉXICO, EJEMPLO Y REPRESENTACIÓN DE SUS COMPONEN

Análisis Sintáctico: Se encarga de chequear la secuencia de tokens que se representa al texto de entrada, en la base a una gramática dada. En caso de que el programa sea válido, suministra el árbol sintáctico que lo reconoce en base a una representación computacional. Este árbol es el punto de partida de la fase posterior de la etapa de análisis: El analizador semántico.

Bibliografía: Compiladores, Traductores y Compiladores con Lex/Yacc , Sergio Gálvez Rojas y Miguel Ángel Mora Mata (2005).

Análisis Sintáctico: Comprueba que el orden en que el analizador léxico le va entregando los tokens es válido. Si esto es así significará que la sucesión de símbolos que representan dichos tokens puede ser generada por la gramática correspondiente al lenguaje del código fuente.

La forma más habitual de representar la sintaxis de un programa es el árbol de análisis sintáctico, y lo que hacen los analizadores sintácticos es construir una derivación por la izquierda o por la derecha del programa fuente, que en realidad son dos recorridos determinados del árbol de análisis sintáctico.

Funciones del analizador sintáctico:

*Comprobar si la cadena de componentes léxicos proporcionada por el analizador léxico puede ser generada por la gramática que define el lenguaje fuente.

*Construir el árbol de análisis sintáctico que define la estructura jerárquica de un programa y obtener la serie de derivaciones para generar la cadena de componentes léxicos. El árbol sintáctico se utilizara como representación intermedia en la generación de código. Informar de los errores sintácticos de forma precisa y significativa y debería estar dotado de un mecanismo de recuperación de errores para continuar con el análisis.



Ejemplo


Declarar Atributo de clase:
Modificador de Acceso +palabra reservada static+ tipo de dato + nombre del Atributo+;
Ejemplo:
public static int n1;

I---> MSTNE
M----> public, private, protected
S ----> static
T ----> double, int, string…
N -----> L|LN|LD
L -----> A..Z|a..z
D ---> 0..9
E ----> ;

No hay comentarios:

Publicar un comentario