Está en la página 1de 19

Lenguajes y Compiladores FISI 2019-II

GUIA II
ANALIZADOR LEXICOGRAFICO
GRAMATICAS

Valor.. a pesar de todas las debilidades


del cuerpo, el espiritu debe triunfar

Beethoven

Avram Noam Chomsky (nacido el 7 de diciembre de 1928 en


Filadelfia, EEUU) es profesor emérito de Lingüística en el MIT y una
de las figuras más destacadas de la lingüista del siglo XX. Creó la
gramática generativa, disciplina que situó la sintaxis en el centro de la
investigación lingüística y con la que cambió por completo la
perspectiva y los programas y métodos de investigación en el estudio
del lenguaje, actividad que elevó definitivamente a la categoría de
ciencia moderna. Desde el año 1959 en que Chomsky dio su
clasificación de las gramáticas, se han publicado muchos trabajos
sobre lenguajes y gramáticas en el aspecto formal. La perspectiva
lógico-matemática del distribucionalismo harrisiano, es reconocida y
adoptada por Chomsky, como explícitamente se manifiesta en su libro
The logical structure of linguistic theory, redactado entre 1951 y 1955,
pero sin publicarse íntegramente.
Chomsky es quien introduce estructuras sintácticas en el estudio de la lengua. Dada la enorme
complejidad del sistema lingüístico, Chomsky considera adecuada la descripción estructural en
términos de niveles de representación de las oraciones. Adicionalmente, lo novedoso de Chomsky
frente a los estudiosos anteriores es la capacidad de conjugar orgánicamente un pensamiento
tradicional con saberes de naturaleza lógico-matemática para tratar de manera clara, formal y explicita
los procesos recursivos del lenguaje humano. Como lingüista Chomsky ha sacudido de manera
despiadada al estructuralismo lingüístico en sus manifestaciones estadounidenses y europeas, lo que
suscito grandes discusiones y controversias en torno a su modelo generativo transformacional. Pero
sus reflexiones no son solo de naturaleza lingüística, sino que tiene perfiles filosóficos, pues despierta
controversias entre el empirismo y el racionalismo.

Objetivos de aprendizaje

Especificar un analizador lexicografico

Especificar gramaticas

Augusto Cortez Vásquez Pag.1/19


Lenguajes y Compiladores FISI 2019-II

Introducción
Se presenta en esta guía

La estructura de un analizador lexicográfico y su interacción con los otros módulos


del compilador.

EL modelo formal de una gramática

ESTRUCTURA DE UN COMPILADOR

El compilador consta de dos módulos

Analizador
Se divide en tres módulos:
Analizador lexicográfico (Scaner)
Analizador sintáctico (Parser)
Analizador semántico

Sintetizador
Generador de código intermedio
Optimador de código
Generador de código

Augusto Cortez Vásquez Pag.2/19


Lenguajes y Compiladores FISI 2019-II

ANALIZADOR LEXICOGRAFICO

El analizador léxico es la primera fase de un compilador. Su principal función consiste en


leer los caracteres de entrada y elaborar como salida una secuencia de componentes léxicos
que utiliza el analizador sintáctico para hacer el análisis. Esta interacción, suele aplicarse
convirtiendo al analizador léxico en una subrutina del analizador sintáctico.
Recibida la orden “Dame el siguiente componente léxico” del analizador sintáctico, el
analizador léxico lee los caracteres de entrada hasta que pueda identificar el siguiente
componente léxico.

Un analizador léxico y/o analizador lexicográfico (en inglés scanner) es la primera


fase de un compilador consistente en un programa que recibe como entrada el
código fuente de otro programa (secuencia de caracteres) y produce una salida
compuesta de componentes léxicos (una por cada token ). Estos componentes
léxico sirven para una posterior etapa del proceso de traducción, siendo la entrada
para el analizador sintáctico (en inglés parser).

Se encarga de buscar los componentes léxicos o palabras que componen el


programa fuente, según unas reglas o patrones. La entrada del analizador léxico
podemos definirla como una secuencia de caracteres.

Lexema o token

Consiste de una secuencia de caracteres (palabra). A cada token , el Scanner le asocia


un componente léxico. Si un token no corresponde a ningún componente léxico, se dice
que ha ocurrido un error lexicográfico

Augusto Cortez Vásquez Pag.3/19


Lenguajes y Compiladores FISI 2019-II

Ejemplo 1
lexemas

Área, base, alfa, talla …. Id

12, -32, 12.65 …. CN

+ , - `, *, / OAr

…..

PR
INICIO, FIN, LEER ….

Componentes léxicos
Sea W : Área = (base *altura) / 2 ;

El analizador lexicográfico producirá la salida

Componente léxico Lexema o token


ID Area
Operador asignación =
Paréntesis izquierdo (
ID base
Operador aritmético multiplicación *
ID altura
Paréntesis derecho )
Operador aritmético división /
Constante numérica 2
Delimitador fin de sentencia ;

Augusto Cortez Vásquez Pag.4/19


Lenguajes y Compiladores FISI 2019-II

Cada componente léxico tiene su propia especificación

Identificador Expresión regular L(L/D)*

L L/D
A B

Estado inicial A
Estado final B

Ejemplo 2
Consideremos L = { w talque w es una expresión aritmética}
= { b, a+b, (a+b)/2…}

Componentes léxicos : ID identificador


CN constante numerica
PI paréntesis izquierdo
PD paréntesis derecho

,
Cualquier w consta de una secuencia de lexemas w1 w2 w3……wn
Cada Wi corresponde a un componente lexico de L

GRAMATICA
Una gramática es un instrumento que se utiliza para especificar la sintaxis de un lenguaje. La
gramática de un lenguaje describe las reglas para verificar el orden estructural de las frases que
pertenecen al lenguaje. La gramática no describe la semántica o significado de las distintas
proposiciones.

Definición formal de gramática


Una gramática se define formalmente de siguiente forma:

G =( VT , VN, P, S) donde :

VT : conjunto finito de símbolos terminales del lenguaje


VN : conjunto finito de símbolos no terminales

Augusto Cortez Vásquez Pag.5/19


Lenguajes y Compiladores FISI 2019-II

P : conjunto finito de reglas de producción


S : Símbolo distinguido o axioma inicial a partir del cual se reconocerán las
secuencias de L aplicando sucesivamente las reglas de producción.

Convenio de notación
Las variables no terminales se escriben con letras mayúsculas, ejemplo A, B,...
Las terminales se escriben con letras minúsculas y en negrita.

Ejemplo 3

L(G1)={amb , m  0}= { b, ab, aab, aaab,...}

G1 (VN, VT, S, P) donde


S b
VN = {S} S aS ab
VT ={a, b} S aS aaS aab
P: { S aS / b} S aS aaS aaaS aaab

luego b,ab, aab, aaab  L(G1).

Ejemplo 4
L(G4)={apbap , p  1} G4 (VN, VT, S, P) donde
VN = {S} VT ={a, b}
P: { S aMa
M aMa / b
}

para p= 1 S aMa aba

para p= 2 S aMa aaMaa aabaa

luego aba , aabaa  L(G4).

Gramática y Máquinas

Para cada clase de gramática existe una dualidad entre esa clase de gramática y una clase de
maquina abstracta

1. Un autómata de estados finitos, se compone de una representación grafica de estados finitos y


una memoria secuencial de un solo sentido. Para cada operación., el autómata lee el símbolo
siguiente de la memoria y entra a un nuevo estado.
2. Un autómata de desplazamiento descendente agrega una pila al autómata finito. Para cada
operación, el autómata lee el siguiente símbolo de la memoria de la pila y el símbolo de la pila,
escribe un nuevo símbolo en la pila y entra a un nuevo estado.
3. Un autómata linealmente acotado, es similar al autómata finito, con el agregado de que puede
leer y escribir en la cinta para cada símbolo de entrada y puede mover la cinta en un sentido u
otro.

Augusto Cortez Vásquez Pag.6/19


Lenguajes y Compiladores FISI 2019-II

4. Una maquina de Turing, es similar a un autómata linealmente acotado, excepto que la cinta es
infinita en ambos sentidos.

El autómata linealmente acotado (LBA- linear-bounded automaton) como una maquina de turing
que puede usar solo la cantidad de cinta que contiene datos de entrada. Por tanto, su almacenamiento
crece con el tamaño de la entrada y puede reconocer cadenas más complejas. Sin embargo su
capacidad de almacenamiento de datos es limitada en comparación con la maquina de turing, puesto
que no puede extender su memoria indefinidamente.

Lenguajes definidos por una gramática


*
Si G es una gramática, genera un lenguaje L(G) VT
w , y además w  VT } ,
* *
L ={w / S

es decir son todas las secuencias que están en la cerradura de VT, que pueden obtenerse
a partir del axioma de la gramática aplicando las reglas de producción.
Si a1, a2, ...an w  (VN U VT)*
tal que a1 a2, a2 a3, ...an-1 an
entonces decimos que a1 * an

Formas sentenciales.
Si ai (VN U VT) y ai  VT Entonces, decimos que ai es forma sentencial.
* *

Si ai  VT Entonces, decimos que ai es una sentencia


*

Diagramas sintácticos de gramáticas


Aunque no existe una regla rígida para la construcción de los diagramas de
transiciones se recomienda un diagrama de conway por cada regla de producción. El
diagrama de conway muestra la sintaxis del lenguaje, y para una mejor lectura de los
diagramas debe haber una congruencia entre cada diagrama de conway y cada regla de
producción

La regla de producción F (E) / V/ C


Se puede representar

FACTOR
( EXPRESION )

VARIABLE

CONSTANTE

La regla de producción E D D*
Se puede representar

Augusto Cortez Vásquez Pag.7/19


Lenguajes y Compiladores FISI 2019-II

ENTERO DIGITO

La regla de producción T F ((* / div ) F ) *


Se puede representar

ENTERO FACTOR

div

Ejemplo 5

Supongamos L ={w talque w es una proposición de asignación}

G= P Id = E
E E Op E / Id / CN
OP + / - / */ div
CN CNE / CNR
CNE D / D CNE
CNR CNE . CNE
D 0/1/2/3/4/5/6/7/8/9

VT={Id,+,-,*,div, .}

P Id = E

Id y el operador = son terminales


E es no terminal (cuadrado), por tanto deberá construirse un diagrama para E

CNE
CN

Augusto Cortez Vásquez Pag.8/19


Lenguajes y Compiladores FISI 2019-II

CNE DIGITO

DIGITO CNE
CNR
CNE . CNE

DIGITO

0 1 2 3 4 5 6 7 8 9

Ejemplo 6

Consideremos la gramática de lenguaje JAVA


P public class N_Prog { L_Decl L_Fun Fun_Princ}

N_Prog Id
L_Decl Decl; / L_Decl ; Decl
Decl TIPO L_Id;
TIPO int / char / String
L_Id id / L_Id ,Id
L_Fun Fun / L_Fun ; Fun
Fun public static TIPO N_Fun(){ Cuerpo_Fun}
Fun_Princ public static void main(String arg[ ] ){L_Decl L_Prop }
L_Prop Prop / L_Prop ; Prop
Prop Asig / Lectura / Escritura
Cuerpo_Fun L_Decl L_Prop
Asig Id = Expr
Expr Termino /Termino * Factor /Termino DIV Factor
Factor Id / entero / ( Expr)
Escritura System.out.println( L_Id)

Augusto Cortez Vásquez Pag.9/19


Lenguajes y Compiladores FISI 2019-II

Se deja como ejercicio construir los demas diagramas de CONWAY

Clasificación de gramáticas

Las reglas de producción tiene la forma: i d


la regla de producción se interpreta como que el lado izquierdo de la regla se
reemplaza por el lado derecho.

GRAMÁTICA TIPO 0 – (Gramáticas con estructura de frase) Sus reglas de


producción no tienen restricciones.

GRAMÁTICA TIPO 1.-(Gramáticas sensibles al contexto GSC)


Las producciones tienen la forma:
B donde A VN ,,B (VN U VT)
*
p: A

GRAMÁTICA TIPO 2.-(Gramáticas libres del contexto GLC)


Las producciones tienen la forma:
 donde A VN y  (VN U VT)
*
p: A

GRAMÁTICA TIPO 3.- (Gramáticas regulares GR)


Las producciones tienen la forma:
p: A a o A aB regular por la derecha
p: A a o A Ba regular por la izquierda
donde A, B VN y a  VT*

G.con estructura
de frase

G. sensible
al contexto

G.libre del
contexto

G.regular

Propiedades
1 Podemos apreciar en el gráfico que:
Si G es GR entonces G es GLC

Augusto Cortez Vásquez Pag.10/19


Lenguajes y Compiladores FISI 2019-II

Si G es GLC entonces G es GSC


Si G es GSC entonces G es tipo 0

2 Podemos afirmar que :


Si G es tipo 0 entonces L(G) es Lenguaje tipo 0
Si G es GSC entonces L(G) es sensible al contexto
Si G es GLC entonces L(G) es libre del contexto
Si G es GR entonces L(G) es un conjunto regular.

Ejemplo 7
G (VN, VT, S, P) donde VN = {S} VT ={a, b}
P: {S aSb/ab}

S ab L(G15)={anbn , n  1 }
S aSb aabb G15 es sensible al contexto
S aSb aaSbb aaabbb
en general:
S aSb aaSbb ... aa..aSb..bb a..ab..b
ASb,aaSbb son formas sentenciales, ab,aabb,aaabbb L(G4)

Ejemplo 8

G (VN, VT, S, P)
donde VN = {S, R, Q} , VT={a, b, c}
P: { 1-2 S aSRQ/ aRQ,
3 QR RQ,
4 aR ab,
5 bR bb,
6 bQ bc,
7 cQ cc }

S aRQ abQ abc

S aSRQ aaRQRQ aabQRQ


aabRQQ aabbQQ aabbcQ aabbcc

en general : L(G16) = {anbncn , n  1 }

Ejemplo 9

Augusto Cortez Vásquez Pag.11/19


Lenguajes y Compiladores FISI 2019-II

G (VN, VT, S, P)
donde VN = {S, A, B} , VT={a,b,c,d}

P: { S AB
A aAb/ab
B cBd/cd
}

S AB abcd
S AB aAbB aabbcd

en general : L(G18) = {ambmcndn ,donde m,n  1 }

Ejemplo 10

La siguiente gramática genera todas las expresiones booleanas

G (VN, VT, EXPR, P)


donde VN ={ EXPR, TERM, FACT}

VT ={verdad, falso, y, o, no, (, )}


P: { EXPR EXPR o TERM / TERM
TERM TERM y FACT / FACT
FACT no FACT / (EXPR) / verdad / falso
}

Árboles sintácticos y derivaciones


Anteriormente habíamos definido el lenguaje definido por la gramática de la siguiente
forma

L ={w / S *
w , y además w  VT* } ,

es decir son todas las secuencias que están en la cerradura de V T, que pueden obtenerse a partir del
axioma de la gramática aplicando las reglas de producción.

Augusto Cortez Vásquez Pag.12/19


Lenguajes y Compiladores FISI 2019-II

Árbol de derivación

Un árbol de derivación permite mostrar gráficamente cómo se puede derivar


cualquier cadena de un lenguaje a partir del símbolo distinguido de una gramática
que genera ese lenguaje. Un árbol es un conjunto de puntos, llamados nodos,
unidos por líneas, llamadas arcos. Un arco conecta dos nodos distintos. Para ser
un árbol un conjunto de nodos y arcos debe satisfacer ciertas propiedades:

a) Hay un único nodo distinguido, llamado raíz (se dibuja en la parte


superior) que no tiene arcos incidentes.
b) Todo nodo c excepto el nodo raíz está conectado con un arco a otro nodo
k, llamado el padre de c (c es el hijo de k). El padre de un nodo, se dibuja
por encima del nodo.
c) Todos los nodos están conectados al nodo raíz mediante un único camino.
d) Los nodos que no tienen hijos se denominan hojas, el resto de los nodos se
denominan nodos interiores.

El árbol de derivación tiene las siguientes propiedades:

a) El nodo raíz está rotulado con el símbolo distinguido de la gramática;


b) Cada hoja corresponde a un símbolo terminal o un símbolo no terminal;
c) Cada nodo interior corresponde a un símbolo no terminal.

Para cada cadena del lenguaje generado por una gramática es posible construir (al
menos) un árbol de derivación, en el cual cada hoja tiene como rótulo uno de los
símbolos de la cadena.

w  L(G) si y solo si existe un árbol de derivación para w

Para cada frase reconocida por la gramática G, podemos construir un árbol de derivación, donde :

1 Todo nodo tiene una etiqueta E  VTU VN


2 La etiqueta de la raíz es S
3 La etiqueta E de un nodo n que no es hoja debe ser el lado izquierdo de alguna
producción p

Augusto Cortez Vásquez Pag.13/19


Lenguajes y Compiladores FISI 2019-II

4 Si los nodos n1, n2, ... nk son descendientes directos del nodo n(de izquierda a
derecha), con etiquetas A1 ,A2 ,A3.. ,Ak
entonces existe una producción:
A A1A2A3.. Ak  P
Podemos afirmar que w  L(G) si existe un árbol de derivación para w.

Ejemplo 11
Consideremos la siguiente gramática

G (VN, VT, S, P) donde


VN = {S,NOMBRE,VERBO,ADJ, NOMB-SING, VERBO-SING,ADVERBIO}
VT {El, La, Los, Las, Pequeño, traviesa, niño, niña, estudia, corre, juega, salta}

P: { S NOMBRE VERBO
NOMBRE ADJ NOMBRE
NOMBRE ADJ NOMB-SING
VERBO VERB-SING ADVERBIO
ADJ El /La /Los /Las
ADJ Pequeño /traviesa
NOMB-SING niño / niña
VERB-SING estudia / corre / juega /salta
ADVERVIO rápidamente / despacio / mucho
}

NOMBRE VERBO

ADJ NOMBRE VERB-SING ADVERBIO

El ADJ NOMB-SING corre rápidamente

Pequeño niño

Augusto Cortez Vásquez Pag.14/19


Lenguajes y Compiladores FISI 2019-II

luego w='El Pequeño niño corre rápidamente'  L(G31)

DERIVACIÓN POR LA EXTREMA IZQUIERDA Y POR LA EXTREMA


DERECHA

Derivación es extrema izquierda.


Si en cada paso de una derivación se aplica una producción a la variable no terminal que se
encuentra mas a la izquierda.

Derivación es extrema derecha.


Si en cada paso de una derivación se aplica una producción a la variable no Terminal que
se encuentra mas a la derecha.

Si w  L(G) para G GLC entonces existe un árbol de análisis gramatical o sintáctico para
w.
Este árbol tiene una derivación por la izquierda y otro árbol de derivación por la derecha.
W puede tener varias derivaciones por la izquierda y por la derecha.
Existe mas de un árbol de derivación para w,
Para cada árbol de derivación solo puede obtenerse una derivación extrema izquierda y una
derivación extrema derecha.

Ejemplo 12

Sea la gramática libre del contexto


G34 (VN, VT, S, P) donde VN = {S, A, B} VT = {a, b}
P: { 1 S aB/bA
3 A a/aS/ bAA
6 B b/bS/ aBB
}
S aB ab
S aB abS abbA abba
S aB abS abaB abab
S bA baS baaB baab

en general L(G34) = {w  {a,b}* , donde #as = #bs}

Ejemplo 13
G (VN, VT, S, P)
donde VN = {S, A, B} , VT={a, b}

Augusto Cortez Vásquez Pag.15/19


Lenguajes y Compiladores FISI 2019-II

P: { 1 S aBa / aSa,
2 B bb/bBb
}

L(G) = {anbman / n > 1 , |m| par }


S
S aBa abba

a B a

bb
S
S aSa aaBaa

aabbaa a S a

a B a

bb

ejercicio construir los demas diagramas de CONWAY

Ejemplo 14
G (VN, VT, S, P)
donde VN = {S, A, B} , VT={a,b,c,d}

P: { S AB
A aAb/ab
B cBd/cd
}

S AB abcd
S AB aAbB aabbcd

en general : L(G) = {ambmcndn ,donde m,n  1 }

Ejemplo 15

Augusto Cortez Vásquez Pag.16/19


Lenguajes y Compiladores FISI 2019-II

Consideremos la siguiente gramática

G (VN, VT, S, P) donde


VN = {S,NOMBRE,VERBO,ADJ, NOMB-SING, VERBO-SING,ADVERBIO}
VT {El, La, Los, Las, Pequeño, traviesa, niño, niña, estudia, corre, juega, salta}

P: { S NOMBRE VERBO
NOMBRE ADJ NOMBRE
NOMBRE ADJ NOMB-SING
VERBO VERB-SING ADVERBIO
ADJ El /La /Los /Las
ADJ Pequeño /traviesa
NOMB-SING niño / niña
VERB-SING estudia / corre / juega /salta
ADVERVIO rápidamente / despacio / mucho
}

NOMBRE VERBO

ADJ NOMBRE VERB-SING ADVERBIO

El ADJ NOMB-SING corre rápidamente

Pequeño niño

luego w='El Pequeño niño corre rápidamente'  L(G)

EJERCICIOS PROPUESTOS

Augusto Cortez Vásquez Pag.17/19


Lenguajes y Compiladores FISI 2019-II

CUESTIONES BREVES

I Describa formalmente
a. Lexema
b) Gramática libre de contexto
c) Forma sentencial
d) Variable terminal
e) Componente léxico
f) Gramática de hipertexto (ver referencia 5)

II Considere el ejemplo 1. Realice el análisis para la frase


W: (2*a) / ((B+c)/34)

III Sea L lenguaje de fórmulas del cálculo de proposiciones


a) Enumere cada uno de los componentes léxicos
b) Realice el análisis para una frase no trivial de L

IV Considere la gramática del ejemplo 11


Construya el árbol de análisis para dos frases validas

V Considere la gramática del ejemplo 13


Construya el árbol de análisis sintáctico para las frases:
aaabbaaa, aabbbaa

VI Construya la gramática para L


a) L: números reales con/sin signo
b) L: números enteros capicúas
c) Secuencias de ceros y unos que no inician con uno y nunca
hay dos ceros consecutivos

VII En que se diferencia una derivación por la extrema derecha de una


derivación por la extrema izquierda

VIII Construya una gramática para L = {ambndn+m ,donde m 0,n  1 }

REFERENCIAS BIBLIOGRAFICAS

[1] [AHO 1990] Aho A.,Sethi,Ullman ”Compiladores, principios, técnicas y


herramientas”; Addison-Wesley1990, Wilmington-Delaware EUA.

Augusto Cortez Vásquez Pag.18/19


Lenguajes y Compiladores FISI 2019-II

[2] [BROOKSHEAR 1993] BROOKSHEAR J. Glean


Teoría de la computación
Addisson Wesley iberoamericana Wilmington Delaware 1993

[3] [CORTEZ 2013] Cortez Vásquez, Augusto. ” Matemáticas discretas”, Editorial San
Marcos.
[4] [CORTEZ 2014] Cortez Vásquez, Augusto. ” Lenguajes y traductores”, Editorial
UCSS.

[5] [CORTEZ 2015] Cortez Vásquez, Augusto. ” Learning System of Web Navigation
Patterns through Hypertext Probabilistic Grammars”, INGE CUC.
https://revistascientificas.cuc.edu.co/ingecuc/article/view/383/2015107

[6] [HOPCROFT 1993] Hopcroft Jhon, Ullman Jeffrey


Introducción a la teoría de autómatas Edit. CECSA 1993

[7] [PEñA 1998] PEñA MARI, Ricardo


Diseño de programas, Formalismo y abstracción
Prentice Hall Madrid 1998

Augusto Cortez Vásquez Pag.19/19

También podría gustarte