La grammatica di Lindenmayer come metodologia di composizione algoritmica bottom up

fractal weeds

Questo tipo di grammatica è stata sviluppata nel 1968 dal biologo Aristid Lindenmayer come un modello matematico per la topologia delle piante.
Una grammatica di Lindenmayer è simile alla classica grammatica di Chomsky, con la differenza che permette produzioni della forma [pmath]A right B[/pmath], dove [pmath]A in N union T[/pmath], con N insieme dei simboli non terminali e T insieme dei simboli terminali (in una grammatica di Chomsky A dev’essere non terminale).
Inoltre le regole per derivare le stringhe sono differenti: nella grammatica di Lindenmayer per derivare la stringa [pmath]beta[/pmath] dalla stringa [pmath]alpha[/pmath], tutti i simboli in [pmath]alpha[/pmath] devono essere rimpiazzati simultaneamente.
Se imponiamo la restrizione di usare esclusivamente simboli terminali nel predecessore e nel successore delle produzioni della grammatica di Lindenmayer, non è più possibile creare livelli gerarchici di astrazione, come avviene nella grammatica di Chomsky e, quindi, si ha un approccio bottom up nella generazione, dove si parte dalle note per improvvisare strutture più complesse.

Definizione formale della grammatica di Lindenmayer

Una grammatica di Lindenmayer è una tripla ordinata [pmath]G=Sigma,P,alpha[/pmath], dove:

  • [pmath]Sigma[/pmath] è l’alfabeto del sistema, [pmath]Sigma^Star[/pmath] è l’insieme di tutte le parole su [pmath]Sigma[/pmath], [pmath]Sigma^+[/pmath] l’insieme di tutte le parole su [pmath]Sigma[/pmath] tranne la stringa vuota.
  • P è un insieme finito di produzioni o regole. Una produzione [pmath](a,chi) in P[/pmath] è scritta come: [pmath]a right chi[/pmath], dove [pmath]a in Sigma[/pmath] e [pmath]chi in Sigma^Star[/pmath]. a è chiamato il predecessore e [pmath]chi[/pmath] il successore della produzione.
  • [pmath]alpha[/pmath] è una stringa non vuota chiamata assioma, [pmath]alpha in Sigma^+[/pmath].

La gnerazione di stringhe mediante una grammatica G procede attraverso una sequenza d’iterazioni successive. Ad ogni iterazione, si cerca di applicare simultaneamente tutte le possibili produzioni ad una stringa, per generarne un’altra.
Ad esempio, dato il seguente insieme di produzioni e un assioma:

[pmath]p_1:C right E[/pmath]
[pmath]p_2:E right CGC[/pmath]
[pmath]p_3:G right epsilon[/pmath]
[pmath]alpha:C[/pmath]

Le stringhe prodotte a partire dall’assioma, attraverso cinque iterazioni sono:

  1. C

  2. E

  3. CGC

  4. EE

  5. CGCCGC

  6. EEEE

Concatenando insieme le stringhe otteniamo:

CECGCEECGCCGCEEEE

Se ogni lettera della stringa finale dell’esempio precedente viene interpretata come nota musicale, la stringa può essere interpretata come musica:

generazione musicale con la grammatica di Lindenmayer

Creative Commons License logo
Questo materiale è protetto dalla Creative Commons License

Leave a Reply