Sie sind auf Seite 1von 17

Proyecto nico

Curso de Lenguajes y compiladores 2016-2

Profesores Luis Astorga y Diego Mosquera


Universidad Nacional Experimental de Guayana

1. Introduccin
LS 2 (Lenguaje de S imulacin de L-S istemas) es un lenguaje indito para
generacin geomtrica de estructuras ramicadas basado en sistemas de Lindenmayer (o L-sistemas).
El proyecto que nos ocupar todo el semestre consiste en que Ud. implemente
un interpretador para LS 2 siguiendo las indicaciones sintcticas y semnticas
que se describen en este documento. Este desarrollo se realizar en tres partes:
1. Anlisis lxico.
2. Anlisis sintctico y construccin del rbol abstracto.
3. Anlisis de contexto e interpretacin.

2. L-sistemas
Los sistemas de Lindenmayer (o L-sistemas ) fueron creados por el bilogo
hngaro Aristid Lindenmayer (1925 - 1989) en 1968 [2] para estudiar la topologa
ramicada de las plantas, en el contexto de la biologa del desarrollo.
Desde la perspectiva matemtica, un L-sistema es una gramtica formal
cuyas reglas de produccin representan la simultnea divisin celular en organismos multicelulares. Por ello, a diferencia de las gramticas de Chomsky
cuyas producciones se aplican secuencialmente sobre un smbolo no-terminal a
la vez, en las L-gramticas sus producciones se aplican en paralelo sobre todos
los smbolos de una cadena.
Para la descripcin matemtica y geomtrica de los L-sistemas hemos consultado los libros The mathematical theory ol L systems de Grzegorz Rozenberg
y Arto Salomaa [4], y The algorithmic beauty of plants de Przemyslaw Prusinkiewicz y Aristid Lindenmayer [3], cuya revisin aconsejamos.
Sean un alfabeto nito.
Una sustitucin nita sobre es una funcin
: Pf in ( )
que asigna a cada smbolo de un conjunto nito de cadenas en , junto
con su clausura asociada
1

2 L-sistemas

: Pf in( )
{}
()
w 7 (w) =

() (y)

si w =
si w = ;
si w = y ; y

donde es la concatenacin de lenguajes. Si


/ () para todo , se dice
de que es -libre.
Un homomosmo h (o cdigo ) es una funcin

h : 

w 7 h (w) =
h () h (y)

si w =
si w = y ; y

h es -libre si 6= h () para todo .


Tanto la sustitucin como el homomorsmo se aplican como un sistema de
reescritura operando en paralelo sobre todos los smbolos de una cadena dada.
Obsrvese que un homomorsmo puede interpretarse como una sustitucin nita
donde las imgenes de los smbolos de son conjuntos unitarios.
Se dene la relacin binaria , llamada derivacin inmediata,
[ ] [ = = i1 ik h (i1 ) h (ik )]
La clausura reexiva y transitiva de se llama derivacin y se denota con .
Se dice entonces que se deriva de ( ) si existe una secuencia nita
0 , 1 , , k (k 0) de cadenas tales que

0 1 k
donde 0 = , k = .
Sean un alfabeto nito , una funcin de generacin f (sustitucin nita
u homomorsmo h), y una cadena inicial (o axioma ) w0 . Los L-sistemas
son dispositivos gramaticales G = (, f, w0 ) que generan sucesiones y lenguajes ;
1) En el caso de sustituciones nitas se producen sucesiones de subconjuntos en Pf in ( ) :
S(G) = {n (w0 )}nN
donde 0 (w0 ) = {w0 } , y se generan lenguajes en Pf in ( ) :

L(G) = {w | {w0 } y w }
Ntese que

L(G) =

n (w0 )

nN

2) En el caso de homomorsmos se producen sucesiones de cadenas en :

S(G) = {hn (w0 )}nN

2 L-sistemas

donde h0 (w0 ) = w0 , y lenguajes en Pf in ( ) :

L(G) = {w | w0 w}
Sea G un L-sistema. La sucesin S(G) presenta un perodo, es decir, a partir
de cierto momento se hace cclica, si y slo si el lenguaje L(G) es nito.
Cuando dos L-sistemas G1 y G2 producen la misma sucesin S(G1 ) = S(G2 )
se dicen equivalentes en sucesin, y si generan el mismo lenguajes L(G1 ) =
L(G2 ) se dicen equivalentes en lenguaje. Equivalencia en sucesin implica equivalencia en lenguaje, pero el recproco no es cierto.
Un 0L-sistema es un tipo particular de L-sistema G = (, f, w0 ) donde 0
(cero) denota reescritura libre de contexto, es decir, ninguna interaccin entre
smbolos contiguos en una cadena.



Ejemplo 1 : Sea el 0L-sistema G = {a} , a , a2 , a5 , a .

{a}
,

2 5
,
a
,
a
,


S(G) =
, a2 , a4 , . . . , a17 , a19 , a20 , a22 , a25 ,

. . . , a18 , . . . , a21 , . . . , a23 , . . . , a24 , . . .

L(G)

= {an | n N n 6= 3}

En este caso, la funcin de generacin f es una sustitucin nita.


Un P 0Les un 0L-sistema donde la funcin de generacin f es libre; P por propagativo.
Un D 0Les un 0L-sistema G = (, h, w0 ) donde la funcin de generacin f es un homomorsmo en . Tanto como w0 tienen la misma signicacin que en un sistema 0L; D por determinstico. Si adems h es -libre se
tiene un PD 0LDenido como est, un sistema 0L es determinstico porque avanza en la
derivacin de conjunto en conjunto de manera unvoca. Sin embargo, se puede
denir de tal suerte que se deba escoger o adivinar la produccin que se requiere
para lograr una cierta forma, y en ese sentido si sera no-determinstico. El
adjetivo determinstico en nuestro contexto connota el uso de un homomorsmo,
y por lo tanto, el proceso evolutivo en la derivacin de cadena en cadena.
Ejemplo 2 : Sea el PD 0L-sistema G = ({a, b} , {a b, b ab} , a).

sistema
sistema

sistema.

S(G) = {a, b, ab, bab, abbab, bababbab, abbabbababbab, . . .}


Ntese que S(G) = L(G). Adems, para todo n N

hn (a) = hn2 (a)hn1 (a)


En efecto,

hn (a)

= hn1 (h(a))
= hn1 (b)
= hn2 (h(b))
= hn2 (ab)
= hn2 (a)hn2 (b)
= hn2 (a)hn2 (h(a))
= hn2 (a)hn1 (a)

2 L-sistemas

Evidentemente, tambin se cumple la relacin de las longitudes





|hn (a)| = hn2 (a) + hn1 (a)
La secuencia de longitudes es la sucesin de Fibonacci; 1,1,2,3,5,8,13,...
Ejemplo 3 : A continuacin, un ejemplo de D 0L-sistemas equivalentes en
lenguaje y no en secuencia.
Sean los sistemas D0L

G1 = ({a, b} , {a bb, b a} , b)
y

G2 = ({a, b} , {a b, b aa} , a)
de manera que

S(G1 )

= {b, a, bb, aa, bbbb, aaaa, . . .}

S(G2 )

= {a, b, aa, bb, aaaa, bbbb, . . .}

sin embargo, L(G1 ) = L(G2 ).


Un 0Les un 0L-sistema G = (, , w0 ) no determinstico dotado de una funcin de probabilidad

sistema estocstico

: P (0, 1]
que asigna a cada produccin del mismo smbolo del alfabeto un peso cumpliendo
la condicin
X
:
p( w) = 1

sistema paramtrico

Un 0Les un 0L-sistema G = (, , w0 ) extendido


en la dotacin de parmetros nmericos a los smbolos del alfabeto nito .
Los 0L-sistema paramtrico fueron creados para modelar, por ejemplo, procesos
generativos de formas biolgicas que cambian con el tiempo como el crecimiento,
o la difusin de componentes qumicos en la estructura generada.
Dado el alfabeto := {1 , . . . , n }, un mdulo es un smbolo denido con
una k -tupla nita de parametros:

(i ) (k N) : i (x1 , . . . , xik ) Rik


donde 1 i n.
Entonces, un 0L-sistema paramtrico es formalmente un dispositivo generativo
G := ( R , f, 0 )
para el cual:
+
1) 0 ( R ) es el axioma, cadena inicial de mdulos no vaca.
2)

f : ( R ) C (R ) ( E (R ))

3 Estructuras ramicadas

donde, C (R ) denota el conjunto de condiciones lgicas sobre las k -tuplas


nitas de parametros, y E (R ) el conjunto de expresiones aritmticas sobre las
mismas k -tuplas nitas de parametros.
La notacin que usaremos para las producciones que expresa la funcin generadora f es la siguiente:

i (x1 ; . . . ; xik ) : p (x1 ; . . . ; xik ) i1 (ei1 (x1 ; . . . ; x)) ij eij (x1 ; . . . ; xik )
donde (1 i n) (j, k N).

Ejemplo 4 : Sea el D 0L-sistema paramtrico


G := ({a (x; y) , b (z) , c} , h, b (2) a (4; 4))
donde h est determinada por las producciones:
a(x; y) : y 3 a (2x; x + y)
a(x; y) : y > 3 b(x)a (x/y; 0)
b(z) : z < 1 c
b (z) : z 1 b(z 1)
c c
Las primeras cuatro derivaciones seran
b (2) a (4; 4)
b (1) b (4) a (1; 0)
b (0) b (3) a (2; 1)
cb (2) a (4; 3)
cb (1) a (1,33; 7)

3. Estructuras ramicadas
En un rbol axial, en cada uno de sus nodos a lo sumo una de sus bifurcaciones es principal, las otras son secundarias.
Una secuencia de segmentos es un eje si:
1) el primer elemento de la secuencia se origina en el nodo raz o como
secundario de algn nodo.
2) cada segmento de la secuencia es principal.
3) el nodo nal del ltimo segmento no tiene bifurcacin.
Un eje junto con sus segmentos secundarios es una rama (subrbol axial).
Los ejes y las ramas tiene un orden:
El eje que se origina en la raz tiene orden 0.
Un eje que se origina en un segmento secundario de un eje de orden n, tiene
orden n + 1.
El orden de una rama es el orden de su eje.
La siguiente imagen [3] ilustra las partes y valores de una estrutura ramicada.

4 Representacin geomtrica

Para generar estructuras ramicadas con L-sistemas se introduce el concepto


de 0L:
1) el alfabeto de smbolos denota las etiquetas de los segmentos.
2) el axioma es un rbol inicial con etiquetas en .
3) las producciones remplazan segmentos predecesores por rboles axiales
sucesores.

rbol

4. Representacin geomtrica
Tal y como hemos comentado, los L-sistemas se crearon para formalizar la
estructura topolgica del crecimiento en la biolgica del desarrollo. Posteriormente fue necesario introducir una forma de representacin visual para modelar
la forma ramicada de las plantas, y se propusieron varias formas de interpretacin grca. La estrategia de interpretacin abordada por Prusinkiewicz y
Lindenmayer en [3] est basada en la llamada tortuga estilo-LOGO propuesta

4 Representacin geomtrica

previamente por Harold Abelson y Andrea DiSessa [1]. Este sistema de representacin permiti tambin establecer la conexin formal entre los L-sistemas y
las complejas formas geomtricas que en matemtica son conocidas como teselaciones y fractales.
En dos dimensiones (existe tambin un sistema para tres dimensiones que
no trataremos en este proyecto), un estado de la tortuga se dene como un par
posicin-orientacin ((x, y) , ).
Dados, un tamao de paso d y un incremento de ngulo , la tortuga responde
a los siguientes comandos:
1) F, f : la posicin cambia una longitud d. El estado de la tortuga cambia

((x, y) , ) ((x + d cos , y + d sin ) , )


con F la lnea de recorrido se dibuja y con f no.
2)+, ; la orientacin cambia un ngulo . Con el smbolo + el estado de la
tortuga cambia
((x, y) , ) ((x, y) , + )
y con el smbolo el estado cambia

((x, y) , ) ((x, y) , )
Se comienza con dos guras: una inicial y otra generatriz. Esta ltima es
una lnea poligonal orientada de lados iguales de longitud dada. El proceso
consiste en sustituir cada segmento rectilneo de la gura inicial con la generatriz
orientada, segn comienzo y n del segmento sustituido, recalculando en cada
paso la longitud nal de los segmentos y la escala de la gura generatriz.
Ejemplo 5 : La reproduccin de la famosa curva conocida como isla de Koch
en la interpretacin grca de tortuga-LOGO es:
ngulo de giro: 90o
Figura inicial: F F F F

Figura generatriz: F F F + F + F F F F + F

La siguiente imagen [3] muestra las primeras tres derivaciones.

4 Representacin geomtrica

Para representar grcamente una estructura ramicada se extiende el alfabeto del 0L-rbol con dos smbolos que representan el manejo de una pila,
porque se requiere de un mecanismo de memoria que devuelva el cursor al inicio
de una rama para continuar.
Dos nuevos comandos se usan para construir la ramicacin:
[; comando para empilar (push ), coloca el estado actual (posicin, orientacin, eventualmente otros atributos) en el tope de la pila.
]; comando para desempilar (pop ), extrae el estado del tope de la pila y lo
actualiza.
Ejemplo 6 :
:= {X, F, [, ]},
:= X ,
:= 20 ,
P := {X F [+X]F [X] + X, F F F }
Las siguientes imgenes muestran la geometra de las producciones:

4 Representacin geomtrica

?
X

O
X

O
F

O
F

La siguiente imagen [3] muestra las primeras siete derivaciones.

4 Representacin geomtrica

10

Finalmente, para extender el sistema de representacin grca tortuga-LOGO,


el primer parmetro de cada mdulo se destina a controlar el estado de la tortuga: longitud para desplazamientos, ngulo para giros.
La tortuga responde a los siguientes comandos:
1) F (d, . . .), f (d, . . .): la posicin cambia una longitud d. El estado de la
tortuga cambia

((x, y) , ) ((x + d cos , y + d sin ) , )


con F la lnea de recorrido se dibuja y con f no.
2)+(, . . .), (, . . .); la orientacin cambia un ngulo . Con el smbolo + el
estado de la tortuga cambia

((x, y) , ) ((x, y) , + )
y con el smbolo el estado cambia

((x, y) , ) ((x, y) , )
Obsrvese que si el ngulo en el paramtro de giro es negativo el efecto en
sentido contrario.
Ejemplo7 :[3]
Se inicializan las variables y se denen las operaciones aritmticas:
c=1
p = 0,3
q =cp
1/2
h = (pq)
El D 0L-sistema paramtrico es:
:= {F, +, },
:= F (1, 0),
:= 86 ,
P := {F (x, t) : t = 0 F (xp, 2) + F (xh, 1) F (xh, 1) + F (xq, 0)}.
La siguiente imagen muestra la geometra de la produccin:

O
h

La siguiente imagen [3] muestra la dcima derivacin.

5 Denicin del lenguaje LS 2

11

5. Denicin del lenguaje LS 2


5.1. Sintaxis de los programas
Los programas tienen una estructura particular como se describe a continuacin (omitiremos deliberadamente los acentos en las palabras reservadas).
Las secciones deben aparecer en el orden indicado y estar separadas entre s
por exactamente una lnea en blanco vaca. Las secciones relevantes son:

Titulo: <nombre del modelo dado por el usuario >.

El ttulo describe de forma breve lo que hace el programa, siempre debe estar
en la primera lnea del programa y terminar con un punto, e.g.

Isla de Koch.

donde el ttulo se constituye con todas las palabras utilizadas. El ttulo del
programa ser utilizado para establecer el contexto de los mensajes de error
durante el anlisis esttico o dinmico.

Comentarios

Inmediatamente despus del ttulo del programa puede escribirse un prrafo


con una cantidad arbitraria de lneas que consiste en comentarios que describan
el grco nal, y debe terminar en punto. Los comentarios son ignorados y son
opcionales.

Gramatica
parametro
parametro

Primero se denen los parmetros como variables:


<nombre > <tipo >
<valor_inicial >
Luego se denen los parmetros como funciones:
<nombre > <tipo >
<expresin_aritmtica >
Seccin opcional para gramticas paramtricas. Puede haber tantos parmetros como sea necesario, en lneas contiguas, pero cada uno debe aparecer
solamente una vez en la lista. <nombre> puede ser cualquier identicador alfanumrico comenzando con una letra minscula. <valor_inicial> debe corresponder con su <tipo>.
Luego se denen los smbolos del alfabeto:

:
:

valor
:=

5 Denicin del lenguaje LS 2

12

simbolo

<nombre > <lista_parmetros >


La lista es opcional para gramticas paramtricas, entre parntesis y separados por comas. <nombre> debe ser una letra mayscula eventualmente seguida
de un nmero de cualquier longitud.

Condiciones

Las condiciones iniciales deben aparecer en el orden indicado, separadas por


una lnea vacia.
<nmero >
<nmero> debe ser un nmero natural mayor que 0.
<ngulo >
Los ngulos se mide en grados. <ngulo> es un valor entero entre 0 y 90.

pasos
angulo
posicion <punto> <ngulo>

<punto> es un par ordenado (Float,Float), y <ngulo> es una valor entre

0 y 180.

matriz

--

-- --

<movimiento_1 > <movimiento _2>


<movimiento _k >
Los movimientos se describen en la prxima seccin.

generatriz
<smbolo_1><lista_parmetros_1> : <expresin_lgica_1> ->
probabilidad <nmero >
<movimientos_1.1 >- -<movimiento _1.2 >- - - -<movimiento _1.k1 >
..
.

<smbolo_n><lista_parmetros_n> <expresin_lgica_n>
<movimientos_n.1 > <movimiento _n.2 >
<movimiento _n.kn >

--

-- --

Un bloque para cada smbolo de la gramtica, separados por una lnea vaca.
Las listas de parmetros y las expresiones lgicas son opcionales.
Cuando hay varias producciones para un mismo smbolo, sin guardas, debe
incluirse su probabilidad, en caso contrario se omite. Todas las probabilidades
para un mismo smbolo deben sumar 1.
<nmero > es un nmero real de dos decimales en (0, 1] .

Fin

Palabra reservada para cerrar un programa.

5.2. Sintaxis de movimientos


Cada movimiento se escribe en una sla lnea sin lneas en blanco por medio.
Los movimientos vlidos en LS 2 son:

(# <smbolo><lista_expresiones_aritmticas>)

Avanza el cursor dibujando el segmento.


<lista_expresiones_aritmticas>, opcional y entre parntesis separadas por
comas, son las operaciones arimticas de los nmeros reales con los parmetros
del smbolo: suma, resta, multiplicacin, divisin, exponenciacin y logaritmos.

(@ <smbolo><lista_expresiones_aritmticas>)
Avanza el cursor sin dibujar el segmento.
<lista_expresiones_aritmticas>, opcional.

5 Denicin del lenguaje LS 2

13

($ <expresin aritmtica>)

Gira el cursor a la derecha segn el ngulo de giro, o el resultado de la


expresin aritmtica, si la hay, entre parntisis.

(& <expresin aritmtica>)

Gira el cursor a la izquierda segn el ngulo de giro, o el resultado de la


expresin aritmtica, si la hay, entre parntisis.

Smbolo para empilar. Coloca el estado actual (posicin, orientacin, eventualmente otros parmetros) en el tope de la pila. No va seguido de .

--

Smbolo para desempilar. Extrae el estado del tope de la pila y lo actualiza


como estado del sistema. No va precedido de .

5.3. Ejemplos de programas

Primer ejemplo de programa.

--

5 Denicin del lenguaje LS 2

Segundo ejemplo de programa.

14

5 Denicin del lenguaje LS 2

Tercer ejemplo de programa.

15

5 Denicin del lenguaje LS 2

Cuarto ejemplo de programa.

16

6 Parte 1: Anlisis lxico

17

6. Parte 1: Anlisis lxico


Esta primera etapa del proyecto corresponde al mdulo de anlisis lxico del
interpretador del lenguaje LS 2 . Usando una herramienta de generacin automtica de analizadores lxicos (Lex, JFlex, Alex, etc.) se produce el programa
que realiza la tarea.
El analizador lxico debe aceptar como entrada cualquier secuencia de caracteres provenientes de un archivo de texto y producir como salida la lista con
los tokens relevantes reconocidos. Si se reciben caracteres que no corresponden
a ningn token del lenguaje LS 2 debe producirse un mensaje de error. Tanto
los tokens reconocidos como los mensajes de error deben acompaarse de la
posicin dentro del archivo (lnea y columna) en la cual han sido encontrados.
Los tokens relevantes son:
1. Las palabras clave y los operadores de movimiento del lenguaje.
2. Identicadores de parmetros y de smbolos.
3. Literales numricos.
4. Separadores (parntesis, coma, doble raya, dos puntos, etc.)
5. Smbolos que denotan operadores aritmticos o relacionales.
Cualquier otro caracter encontrado debe ser reportado como un error.
Los espacios en blanco, tabuladores y saltos de lnea deben ser ignorados
excepto los separadores de seccin. El bloque de comentarios, si existe, debe ser
ignorado.

Referencias
[1] H. Abelson and A. diSessa. Turtle geometry: Computations as a medium for
exploring mathematics. Cambridge, MA: MIT Press, 1981.
[2] A. Lindenmayer. Mathematical models for cellular interactions in development i. laments with one-sided inputs. Journal of Theoretical Biology,
18(3):280299, 1968.
[3] P. Prusinkiewicz and A. Lindenmayer. The Algorithmic Beauty of Plants.
Springer-Verlag New York, Inc., 1990.
[4] G. Rozenberg and A. Salomaa. Mathematical Theory of L systems. Academic
Press, Inc., 1980.

Das könnte Ihnen auch gefallen