You are on page 1of 4

Analizador Sintáctico.

De acuerdo a Yañez. D(2017) , el analizador sintáctico “se encarga de


chequear el texto de entrada en base a una gramática dada. Y en caso de que
el programa de entrada sea válido, suministra el árbol sintáctico que lo
reconoce”. Es decir, el analizador sintáctico es el que determina si la secuencia
de componentes que se analizan concuerda con la sintaxis del lenguaje.

El Dr. Galvez. S(s.f), señala que, además, que, en la práctica, el


analizador sintáctico, realiza el acceso a:
 Tabla de símbolos.
 Chequeo de tipos.
 Generar código intermedio.
 Generar errores cuando se producen.

Imagen 1. Ubicación del analizador sintáctico. Tomada de:


http://www.cartagena99.com/recursos/alumnos/apuntes/ININF2_M4_U3_T2.pdf

De acuerdo, a la imagen anterior, el analizador sintáctico, recibe una


cadena de tokens y genera un árbol sintáctico de salida. Universidad Europea
de Madrid (s.f), “siendo el objetivo de esta fase la de comprobar que la secuencia
de componentes léxicos que le entrega el analizador léxico cumple las reglas de
la gramática que se han definido previamente”.

Tipos de analizadores sintácticos.

Por lo general se utilizan 2 tipos:


1. Descendente: Se denominan así por la forma en la que construyen el
árbol de análisis sintáctico, empezando en la raíz y terminando en las
hojas. A su vez estos pueden utilizar varios algoritmos:

 Análisis sintáctico por descenso recursivo: este analizador hace


una búsqueda en profundidad con retroceso, es decir, que puede
hacer varios exámenes de la entrada. Presenta el inconveniente de
que no es eficiente. En este análisis, cada no-terminal posee asociado
un proceso, si, al llegar al terminal, el procedimiento seleccionado es
el adecuado, se selecciona el siguiente token, sino, se emite un
mensaje de error y se aplica un mecanismo de recuperación.

 Análisis sintáctico predictivo: es un analizador que no necesita


retroceso. Para poder utilizarlos la gramática no puede ser ambigua y
se determina qué regla aplicar a partir de un análisis previo de los
tokens de la entrada (símbolo de preanálisis, que es el componente
léxico de la cadena de entrada situado más a la izquierda). Un ejemplo
de este tipo de analizadores sintácticos descendentes es el método
LL.

2. Ascendente: El objetivo de un análisis ascendente consiste en construir


el árbol sintáctico desde abajo hacia arriba, esto es, desde los tokens
hacia el axioma inicial, lo cual disminuye el número de reglas mal
aplicadas con respecto al caso descendente. Este, también se conoce
como analizador de reducción-desplazamiento, y su árbol de construcción
es el inverso del que se genera en un analizador descendente.
 Analizadores de precedencia de operador: Se utiliza para un
pequeño conjunto de gramáticas, denominadas gramáticas de
operadores (una propiedad que deben cumplir estas gramáticas es
que no pueden tener dos terminales seguidos). Se definen
relaciones de precedencia disjuntos entre los terminales, que son
los operadores, y estas relaciones guían la selección de las
producciones.
 Analizadores LR: Hacen un examen de la entrada de izquierda a
derecha (left-to right, L) y construyen las derivaciones por la
producción más a la derecha (rightmost derivation, R). Estos
analizadores también son denominados analizadores por
desplazamiento y reducción. Hay varios autómatas LR y todos
llevan un símbolo de análisis por anticipado de la entrada.

Generación de Árbol de análisis descendente.

Se siguen 2 pasos:
1. Colocar el axioma como raíz del árbol de derivación.
2. Hasta que solo haya terminales en las hojas derivar por el símbolo que
está más a la izquierda y hacia la derecha.

Generación de Árbol de análisis Ascendente.

El analizador ascendente en el caso del LR(1), consta de una pila de


trabajo auxiliar en la cual va armando el árbol sintáctico implícitamente. Además,
consta de una tabla que consta de 2 partes, Acción y GOTO.
En la tabla de acción de van insertando símbolos gramaticales y estados.
En cada momento, la pila de trabajo accede al estado de tope de fila y token
actual, y accede a la tabla de acción para saber qué hacer, es decir, la tabla
acción provee de las posibles acciones que puede realizar el analizador
ascendente sobre los token y estados. Mientras la tabla de acción consta de
posibles estados en sus filas de los tokens o símbolos gramaticales en sus
columnas (cada celda contiene una acción), la tabla GOTO, en sus filas, contiene
posibles estado y en sus columnas los no terminales de las gramáticas, además,
sus celdas, contienen estados.
Cada una de las celdas podrá contener las acciones: Aceptar, Reducir n
(que significa “reducir por la regla n”), Desplazar m (que significa “desplazar el
token a la pila y apilar encima el estado m, en este caso el analizador accede a
la tabla GOTO para saber qué estado apilar) o la celda estará en blanco (una
celda en blanco corresponde a la acción error).
Si la acción es aceptar, el analizador termina con éxito, es decir,
reconociendo la cadena como correcta.
Si la acción es error (la celda está en blanco), el analizador llama al gestor
de errores (con un código indicativo del error), pues ha detectado que la cadena
tiene un error sintáctico.
De acuerdo a Aguilera. M y Galvez. S(s. f), En un momento dado, el
analizador sintáctico se encuentra en con un par α y β, concreto, al que se llama
configuración. El analizador sintáctico para poder trabajar puede realizar una de
las cuatro operaciones siguientes:
 Aceptar: Cadena reconocida.
 Rechazar: La entrada no es válida.
 Reducir: Aplicar una regla de producción a los elementos no
terminales

Referencias bibliográficas.

Yañez. D (2017). Analizador léxico-sintáctico y semántico. Recuperado el 23 de


Marzo de 2019 de: http://estructuradec0ntrol.blogspot.com/2017/02/analizador-
lexico-sintactico-y-semantico.html

Galvez. S(s.f). Analizador sintactico. Recuperado el 23 de Marzo de 2019 de:


http://www.lcc.uma.es/~galvez/ftp/tci/tictema3.pdf
Anonimo(s.f). Analizador sintactico ascendente. Recuperado el 23 de Marzo de
2019 de:
http://www-lt.ls.fi.upm.es/procesadores/Documentos/AStLR.pdf