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:
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).
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 ----> ;
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