Sei sulla pagina 1di 21

INTRODUCCIN AL DISEO DE COMPILADORES

Lenguajes y Autmatas

Gramticas

L.I. Edgar Gustavo Ortz Lpez


Introduccin al diseo de Compiladores

CONCEPTOS Y NOTACIONES DE GRAMATICAS


GRAMTICA: ( T, N, P ,S)

Chomsky -59

T: Vocabulario terminal
N: Vocabulario no terminal
P: conjunto de reglas de produccin : (T|N)+ --> (T|N)*
S: Smbolo inicial (S N)
Derivaciones:
b --> d es un paso de derivacin si b-->d P
-*--> , si y solo si existe una secuencia de derivaciones
directas
--> 1 --> 2 -->..... --> n -->
L = { / S -*--> , T*}
Introduccin al diseo de Compiladores

CLASIFICACION DE GRAMATICAS
Tipo 3 Sin
restricciones
Tipo 2
Sensibles al contexto
Monotnicas
Tipo 1
Libres de
contexto
Tipo0 : Regulares
Lineal Derecha
Lineal Izquierda

Introduccin al diseo de Compiladores

CLASIF. DE GRAMATICAS - Reglas generales

Tipo 0: Sin restricciones.


Con estructura de frase.
--> , (NUT) + y (NUT) *
Pueden achicarse, extenderse y cambiar smbolos.

Introduccin al diseo de Compiladores

CLASIF. DE GRAMATICAS - Reglas generales

Tipo 2 : Monotnicas
--> , (NUT) + y (NUT) + y || <= | |
No pueden achicarse.
Ej: L = { an bn cn , con n>0}
S --> aSBC bB --> bb
CB -->BC
cC --> cc

o bien

S --> abc | aSC

Introduccin al diseo de Compiladores

S --> abC
aB --> ab

bCc --> bbcc

bC --> bc

cC --> Cc
5

CLASIF. DE GRAMATICAS - Reglas generales


GRAFOS SINTCTICOS a2 b2 c2

( Monotnicas)

S
a

a b C
B
b

S
a

C
c
C

b
b

c
c
pero no puede haber ms no termerminales a izquierda que a derecha
Introduccin al diseo de Compiladores

CLASIF. DE GRAMATICAS - Reglas generales


Tipo 2: Sensibles o dependientes del contexto
A --> , A N, y (NUT)* y (NUT)+
Cambia A por pero solo en el contexto de y
Son equivalentes a las Monotnicas

Ej: L = { an bn cn , con n>0}


S --> aSBC bB --> bb
CB -->BC
cC --> cc

CB -> CX
Introduccin al diseo de Compiladores

S --> abC
aB --> ab

CX ->BX

bC --> bc

BX -> BC
7

CLASIF. DE GRAMATICAS - Reglas generales


Tipo 1: Libres o independientes del contexto
A --> , A N , (NUT)*
Ej: L= { an bn , con n>0} S --> aS b |

S
a
S
b
a S b

Caso particular sin , no se acepta A -->

Tipo0 : Regulares
A --> aB, o bien A --> a Lineal Derecha
A --> Ba , o bien A --> a Lineal Izquierda
A, B N y a T*
Ej: 0*1
S -->A1 , A -->A0 |

Introduccin al diseo de Compiladores

S
A
A
A

1
0

EJEMPLO EN LA CLASIFICACION (1)


GRAMTICAS PARA GENERAR EL CONJUNTO DE TODAS LAS
ENUMERACIONES DE NOMBRES, DE TIPO : Juan, Pedro y Mara
TIPO 3 :

nombre --> Juan | Pedro | Mara


fraseS --> nombre| lista fin
lista --> nombre | nombre , lista
, lista fin --> y nombre

fraseS -->lista fin ---> nombre , lista fin --> nombre, nombre,lista fin
-->

nombre, nombre y nombre

-->Pedro, Mara y Juan


Introduccin al diseo de Compiladores

EJEMPLO EN LA CLASIFICACION (2)


Tipo 2 Monotnica : Se elimina la marca de fin ( no term.) y se
incorpora en el nombre de ms a la derecha.
nombre --> Juan | Pedro | Mara
fraseS --> nombre| lista
lista --> nombref | nombre , lista
, nombref --> y nombre

fraseS -->lista ---> nombre , lista --> nombre, nombre,lista


--> nombre, nombre , nombref --> nombre, nombre y nombre
-->Pedro, Mara y Juan
Introduccin al diseo de Compiladores

10

EJEMPLO EN LA CLASIFICACION (3)


TIPO 2 - Sensible al contexto:
fraseS --> nombre| lista
nombre --> Juan | Pedro | Mara

Contexto

lista

--> nombref | nombre coma lista

coma nombref --> y nombref


y nombref --> y nombre
Coma --> ,
fraseS -->lista ---> nombre coma lista -->
nombre coma nombre coma lista -->
nombre coma nombre coma nombref -->
nombre coma nombre y nombref -->
nombre coma nombre coma y nombre --> Pedro, Mara y Juan
Introduccin al diseo de Compiladores

11

EJEMPLO EN LA CLASIFICACION (4)


TIPO 1 :

nombre --> Juan | Pedro | Mara


fraseS --> nombre | lista y nombre
lista

--> nombre , lista | nombre

fraseS -->lista y nombre --> nombre , lista y nombre --->


nombre , nombre y nombre -->
TIPO 0:

Pedro, Mara y Juan

fraseS --> Juan | Pedro | Mara | lista

lineal

lista --> Juan listaf | Pedro listaf | Mara listaf

derecha

listaf --> , lista | y Juan | y Pedro | y Mara


fraseS --> lista --> Pedro listaf --> Pedro, listaf --> Pedro, Mara listaf
--> Pedro, Mara y Juan
Introduccin al diseo de Compiladores

12

OTRO EJEMPLO DE GRAMATICA TIPO 2


GRAMTICA QUE DETERMINA LA COMPOSICIN TRIVIAL DE UN
LIBRO :

libroS --> Pref CapSec Conclus


Pref --> PREFACIO ParrafSec
CapSec --> Cap | Cap CapSec
Cap --> CAPITULO Nro ParrafSec
ParrafSec --> Parraf | Parraf ParrafSec
Parraf --> FraseSec
FraseSec --> ..........................
Conclus --> CONCLUSION ParrafSec

Introduccin al diseo de Compiladores

13

CLASIF. DE GRAMATICAS - Reglas generales


Se dice que una Gramtica de tipo i , genera un lenguaje de tipo i
Para la escritura de un compilador son importantes: tipos 2 y 3
Las GLC definen la sintaxis de declaraciones, proposiciones, expre.
Las GR definen identificadores, nmeros, cadenas
Las GLC se encuentran en el Anlisis Sintctico y
las GR en el Anlisis Lxico.
Los aspectos dependientes del contexto, se dejan para el anlisis
semntico, por ejemplo:
x := y * x
Introduccin al diseo de Compiladores

14

REPRESENTACIONES GRAFICAS DE GRAMATICAS


Formas de especificar la sintaxis de un lenguaje de programacin
Representacin BNF( Backus-Naur form)
- Metalenguaje (lenguaje con que se describen otros lenguajes)

- Creada para definir la estructura sintctica del ALGOL 60


DIAGRAMAS DE CONWAY O GRAFOS SINTCTICOS:
- Popularizada con la descripcin del PASCAL ( 74)

- Grafo dirigido, con dos componentes esenciales ( rectgulo y


crculo) y lneas o flechas conectivas
Introduccin al diseo de Compiladores

15

REPRESENTACIONES GRAFICAS DE GRAMATICAS


Notacin de BNF

Smbolo

Significado

::=

Se deriva en

or (alternativa).

Ejemplo: T= {+,-, 0,1,2,3,4,5,6,7,8,9}


NT = { int, unsigned-int , digit}
Reglas para definir nmeros enteros con signo:
<int>

::=

+ <unsigned-int> | - <unsigned-int>

<unsigned-int> ::= <digit> | <unsigned-int> <digit>


<digit>

::= 0|1|2|3|4|5|6|7|8|9

Introduccin al diseo de Compiladores

16

REPRESENTACIONES GRAFICAS DE GRAMATICAS


DIAGRAMAS DE CONWAY O GRAFOS SINTCTICOS:
- Rectngulo: representa un NT
- Crculo: representa un smbolo terminal.
- Flujos: Paralelos (or) - Secuencias (contatenacin) - Uno o cero
concurrencias - cero o ms ocurrencias.
Ejemplos:
Definicin de nmeros Naturales

Digito

Parmetros de un programa
(

Identificador

,
Introduccin al diseo de Compiladores

Identificador
Letra
Letra
Digito
17

ARBOLES SINTACTICOS
Forma tpica de un Arbol Sintctico para una:
Gramtica Libre de Contexto

Gramtica regular

S
n+1

S
S

.
S

n-1

Introduccin al diseo de Compiladores

18

Equivalencias

Gramticas regulares

AEF

Expresiones regulares

Gramticas libres de
contexto

Introduccin al diseo de Compiladores

autmatas
Push Down

19

Transformacin de una gramtica regular a


autmata
Sea G una gramtica Regular por izquierda, es
posible encontrar M AEF tal que L(G)=L(M).
Reglas de transformacin:
Gramtica
Autmata
Q={q(A) / A NT}

1. S--> A

I={q(A)}

2. A-->aB

a
q(A) -->q(B)

3. A --> a

a
q(A) --> q(f)

Introduccin al diseo de Compiladores

20

Ejemplo de transformacin

Sea la gramtica G:

El autmata M estar definido como:

1. S--> T

Q={q(T), q(P), q(C), q(f)}

2. T--> aP

I={q(T)}

3. P-->bC

f(q(T),a) = q(P).

4. P-->bP

f(q(P),b) = q(C).

5.C-->a

f(q(P),b) = q(P).

F={q(f)}

f(q(C),a) = q(f).

Introduccin al diseo de Compiladores

21

Potrebbero piacerti anche