Compilador Dise�o - Sintaxis An�lisis


Anuncios


Sintaxis an�lisis o an�lisis es la segunda fase de un compilador. En este cap�tulo, vamos a aprender los conceptos b�sicos utilizados en la construcci�n de un analizador.

Hemos visto que un analizador l�xico puede identificar los tokens con la ayuda de expresiones regulares y reglas de patrones. Pero un analizador l�xico no puede comprobar la sintaxis de una frase debido a las limitaciones de las expresiones regulares. Las expresiones regulares no puede comprobar equilibrio fichas, como entre par�ntesis. Por lo tanto, esta fase utiliza gram�tica libre de contexto (CFG), que est� reconocida por empuje de aut�matas.

CFG, por otro lado, es un superconjunto de Gram�tica Regular, como se ilustra a continuaci�n:

Relacin de la CFG y gramtica regular

Esto implica que cada Gram�tica Regular es tambi�n libres de contexto, pero hay algunos problemas, que est�n m�s all� del alcance de Gram�tica Regular. CFG es una herramienta �til para describir la sintaxis de los lenguajes de programaci�n.

Gram�tica Context-Free

En esta secci�n, vamos a ver en primer lugar la definici�n de gram�tica libre de contexto e introducir t�rminos utilizados en el an�lisis.

UNA gram�tica libre de contexto tiene cuatro componentes:

  • Un conjunto de no-terminales (V). No terminales son variables sint�cticas que denotan conjuntos de cadenas. La no-terminales definir conjuntos de cadenas que ayudan a definir el lenguaje generado por la gram�tica.

  • Un conjunto de s�mbolos, conocido como s�mbolos terminales (Σ). Los terminales son los s�mbolos b�sicos de las cadenas que se forman.

  • Un conjunto de producciones (P). Las producciones de una gram�tica especifica la forma en la que los terminales y no terminales se pueden combinar para formar cadenas. Cada producci�n consiste en un no-terminal llamado el lado izquierdo de la producci�n, una flecha, y una secuencia de las fichas y/o en los terminales, llamado el lado derecho de la producci�n.

  • Uno de los terminales es designado como el s�mbolo de arranque (S); desde donde comienza la producci�n.

Las cadenas se deriva del s�mbolo de arranque varias veces por sustituci�n de un no-terminal (en un principio, el s�mbolo de arranque) por el lado derecho de una producci�n, para que no sean de terminal server.

Ejemplo

Tenemos el problema de palindromo idioma, que no se puede describir por medio de expresiones regulares. Es decir, L = { w | w = wR } no es un idioma habitual. Pero no se puede describir por medio de CFG, tal como se ilustra a continuaci�n:

G = ( V, Σ, P, S )

Donde:

V = { Q, Z, N }
Σ = { 0, 1 }
P = { Q → Z | Q → N | Q → ℇ | Z → 0Q0 | N → 1Q1 }
S = { Q }

Esta gram�tica describe palindromo idioma, tales como: 1001, 11100111, 1010101, 00100, 11111, etc.

Analizadores Sintaxis

Un analizador de sintaxis tiene la entrada de un analizador l�xico en forma de token arroyos. El analizador analiza el c�digo fuente (token) contra las normas de producci�n para detectar los errores en el c�digo. El resultado de esta fase es analizar un �rbol.

Sintaxis Analizador

Esta manera, el analizador realiza dos tareas, es decir, analizar el c�digo y busca los errores y generar un an�lisis �rbol como la salida de la etapa.

Los analizadores se espera para analizar todo el c�digo aunque algunos errores en el programa. Error en la recuperaci�n los Analizadores utilizan estrategias que vamos a aprender m�s adelante en este cap�tulo.

Derivaci�n

Una derivaci�n es b�sicamente una secuencia de reglas de producci�n, con el fin de obtener la cadena de entrada. Durante el an�lisis, tomamos dos decisiones para algunos el oracional formulario de entrada:

  • Decidir el no terminal que se va a sustituir.
  • Decidir sobre la producci�n, por lo cual, el no-terminal ser� reemplazado.

Para decidir que no terminal que se va a reemplazar por producci�n, no puede tener dos opciones.

M�s a la izquierda de derivaci�n

Si el formulario el oracional de una entrada es capturado y se cambia de izquierda a derecha, se llama m�s a la izquierda de derivaci�n. El oracional La forma derivada por el de la izquierda se llama derivaci�n de la izquierda forma el oracional.

M�s a la derecha de derivaci�n

Si podemos explorar y cambiar la entrada con las normas de producci�n, de derecha a izquierda, es lo que se conoce como derivaci�n m�s a la derecha. El oracional La forma derivada de la derivaci�n m�s a la derecha se denomina derecho-el oracional.

Ejemplo

Normas de producci�n:

E → E + E
E → E * E
E → id 

Cadena de entrada: id + id * id.

M�s a la izquierda es derivaci�n:

E → E * E
E → E + E * E
E → id + E * E
E → id + id * E
E → id + id * id

Tenga en cuenta que el lado izquierdo de la no-terminal siempre se procesa primero.

El derecho de la derivaci�n es:

E → E + E
E → E + E * E
E → E + E * id
E → E + id * id
E → id + id * id

Parse Tree

Un an�lisis �rbol es una representaci�n gr�fica de una derivaci�n. Es conveniente para ver c�mo las cadenas se deriva del s�mbolo de inicio. El s�mbolo de arranque de la derivaci�n se convierte en la ra�z de la parse tree. Veamos esto con un ejemplo de este tema.

Seguimos a la izquierda de la derivaci�n de a + b * c

M�s a la izquierda es derivaci�n:

E → E * E
E → E + E * E
E → id + E * E
E → id + id * E
E → id + id * id

Paso 1:

E → E * E Construccin Parse rbol

Paso 2:

E → E + E * E Construccin Parse rbol

Paso 3:

E → id + E * E Construccin Parse rbol

Paso 4:

E → id + id * E Construccin Parse rbol

Paso 5:

E → id + id * id. Construccin Parse rbol

En un an�lisis �rbol:

  • Todos los nodos hoja son terminales.
  • Todos los interiores son los nodos no terminales.
  • En fin traves�a da original cadena de entrada.

�rbol representa un an�lisis asociatividad y precedencia de los operadores. El m�s profundo sub-�rbol es atravesado en primer lugar, por lo tanto el operador en ese sub-�rbol obtiene prioridad sobre el operador que se encuentra en los nodos principales.

Ambig�edad

Una gram�tica G se dice que es ambigua si tiene m�s de un �rbol analizar (a la izquierda o a la derecha) por lo menos una cadena.

Ejemplo

E → E + E
E → E – E
E → id

Para la cadena id + id - id, la gram�tica genera dos analizar los �rboles:

Construccin Parse rbol

El lenguaje generado por una gram�tica es ambigua dice que es inherentemente ambiguo. Ambig�edad de gram�tica no es bueno para un compilador construcci�n. Ning�n m�todo puede detectar y eliminar la ambig�edad autom�ticamente, pero se puede extraer por cualquier re-escritura toda la gram�tica sin ambig�edad, o por establecer y asociatividad y restricciones de precedencia.

Asociatividad

Si un operando tiene operadores de ambos lados, el lado en el que el operador aprovecha esta operando es decidido por la asociatividad de los operadores. Si la operaci�n es asociativos por la izquierda, a continuaci�n, el operando se tomar�n por la izquierda operador, o si la operaci�n es asociativa, el operando derecho tendr� el operando.

Ejemplo

Las operaciones tales como la adici�n, sustracci�n, multiplicaci�n, divisi�n y asociativo. Si la expresi�n contiene:

id op id op id

�sta ser� evaluada como:

(id op id) op id

Por ejemplo, (id + id) + id

Operaciones de exponenciaci�n como son derecho asociativo, es decir, el orden de evaluaci�n en la misma expresi�n ser�:

id op (id op id)

Por ejemplo, id ^ (id ^ id)

Prioridad

Si dos operadores diferentes comparten un operando, la precedencia de los operadores decide que tendr� el operando. Es decir, 2+3*4 puede tener dos an�lisis diferentes �rboles, uno correspondiente a (2+3) * 4 y otro correspondiente a 2+(3 * 4). De preferencia entre los operadores, este problema se puede retirar f�cilmente. Como en el ejemplo anterior, desde el punto de vista matem�tico * (multiplicaci�n) tiene precedencia sobre + (suma), de forma que la expresi�n 2+3 * 4 siempre ser� interpretada en el sentido de:

2 + (3 * 4)

Estos m�todos disminuyen el riesgo de ambig�edad en el lenguaje o su gram�tica.

Recursi�n izquierda

Una gram�tica se convierte izquierda-recursive si tiene cualquier no terminal 'A' cuya derivaci�n contiene 'A' s� mismo como el s�mbolo de la izquierda. De izquierda gram�tica recursiva es considerada una situaci�n problem�tica para los analizadores. De arriba a abajo los analizadores iniciar el an�lisis desde el principio, y que en s� mismo no es terminal. Por lo tanto, cuando el analizador encuentra el mismo no-terminal en su derivaci�n, se vuelve dif�cil de juzgar cuando para detener el an�lisis de la izquierda no terminales y que entra en un bucle infinito.

Ejemplo:

(1) A => Aα | β
(2) S => Aα | β 
    A => Sd 

(1) es un ejemplo de recursividad inmediatamente a la izquierda, donde A es un s�mbolo no terminal y α representa una cadena de terminales.

(2) es un ejemplo de recursividad indirecta a la izquierda.

izquierda recursividad

Un analizador de arriba abajo, en primer lugar analizar el A, que a su vez producir� una cadena compuesta por el mismo y el analizador puede entrar en un bucle indefinidamente.

Extracci�n de recursi�n izquierda

Una forma de eliminar la recursividad izquierda para usar el siguiente m�todo:

La producci�n

A => Aα | β

Se convierte en producciones

A => βA’
A => αA’ | ε

Esto no tiene impacto en el las cadenas derivadas de la gram�tica, sino que elimina inmediatamente a la izquierda recursividad.

Segundo m�todo consiste en utilizar el siguiente algoritmo, que deben eliminar todas directas e indirectas recursividad izquierda.

START
Arrange non-terminals in some order like A1, A2, A3,…, An
   for each i from 1 to n
      {
      for each j from 1 to i-1
         {
         replace each production of form Ai⟹Aj𝜸
         with Ai ⟹ δ1𝜸  | δ2𝜸 | δ3𝜸 |…| 𝜸 
         where Aj ⟹ δ1 | δ2|…| δn  are current Aj productions
         }
      }
   eliminate immediate left-recursion
END

Ejemplo

La producci�n

S => Aα | β 
A => Sd

Despu�s de aplicar el algoritmo antes descrito, debe convertirse en

S => Aα | β 
A => Aαd | βd

Y, a continuaci�n, retirar inmediatamente a la izquierda recursividad con la primera t�cnica.

A => βdA’
A => αdA’ | ε

Ahora bien, ninguna de la producci�n directa o indirecta izquierda recursividad.

Factoring izquierda

Si hay m�s de una gram�tica normas de producci�n tiene un prefijo com�n cadena, entonces el top-down analizador no puede hacer una elecci�n de de la producci�n debe tener para analizar la cadena de la mano.

Ejemplo

Si un top-down analizador encuentra una producci�n como

A ⟹ αβ | α𝜸 | …

A continuaci�n, no puede determinar qu� producci�n a seguir para analizar la cadena de ambas producciones est�n empezando desde el mismo terminal (o no-terminal). Para eliminar esta confusi�n, se utiliza una t�cnica llamada izquierda factoring.

Factoring Izquierda transforma la gram�tica para que sea �til para los analizadores de arriba a abajo. En esta t�cnica, se hace una producci�n para cada uno de los prefijos y el resto de la derivaci�n de nuevas producciones.

Ejemplo

Las producciones se puede escribir como

A => αA’
A’=> β | 𝜸 | … 

Ahora el analizador s�lo tiene una producci�n por prefijo, lo que facilita a la hora de tomar las decisiones.

En primer lugar y el seguimiento conjuntos

Una parte importante del analizador construcci�n tabla es para crear la primera y el seguimiento. Estos juegos pueden proporcionar la posici�n real de cualquier terminal de la derivaci�n. Esto se hace para crear el an�lisis tabla donde la decisi�n de reemplazar T[A, t] = α con parte de la producci�n.

Primer Juego

Este juego es creado para saber qu� s�mbolo terminal se deriva de la primera posici�n por un no-terminal. Por ejemplo,

α → t β

Se deriva que es α t (terminal) en la primera posici�n. Por lo tanto, t ∈ PRIMERO(α).

Algoritmo para calcular primero

F�jese en la definici�n de PRIMERA(α) establecido:

  • Si α es una terminal, luego en la primera(α) = { α }.
  • Si α es un no-terminal y α → ℇ es una producci�n, entonces PRIMERO(α) = { ℇ }.
  • Si α es un no-terminal y α → 𝜸1 𝜸2 𝜸3 … 𝜸n cualquier PRIMERA(𝜸)contiene a su vez, t. t es de primera(α).

En primer lugar se puede considerar como:

Primera Frmula

Sigue

Del mismo modo, podemos calcular qu� s�mbolo terminal sigue inmediatamente un no-terminal α en normas de producci�n. No tenemos en cuenta lo que el no-terminal puede producir pero en lugar de eso, vemos lo que ser�a el siguiente s�mbolo terminal que sigue la producci�n de un no-terminal.

Algoritmo para calcular sigue:

  • Si α es un s�mbolo de inicio y, a continuaci�n, siga() = $

  • Si α es un no-terminal y tiene una producci�n α → AB, luego la primera(B) es en el seguimiento(A), salvo ℇ.

  • Si α es un no-terminal y tiene una producci�n α → AB, donde B ℇ, a continuaci�n, siga(A) est� en el seguimiento(α).

Seguimiento conjunto puede considerarse como: SEGUIMIENTO(α) = { t | S *αt*}

Analizadores de Sintaxis Limitaciones

Analizadores Sintaxis recibir sus aportes, en forma de fichas, de analizadores l�xicos. Analizadores l�xicos son responsables de la validez de un token suministrado por el analizador sintaxis. Sintaxis analizadores tienen los siguientes inconvenientes:

  • No se puede determinar si una se�al es v�lida,
  • No puede determinar si un token es declarado antes de que se utilice,
  • No puede determinar si un token se inicia antes de que se utilice,
  • No se puede determinar si una operaci�n realizada en un tipo de token es v�lida o no.

Estas tareas son realizadas por el analizador sem�ntico, que estudiaremos en an�lisis sem�ntico.



Advertisements