Polygen

Da Andreabont's Wiki.

Polygen è un'interprete di grammatiche di tipo 2 (secondo la classificazione di Chomsky) che utilizza una variante più espressiva dell'EBNF (Extended Backus Naur Form)

Esecuzione

polygen -X <numero_generazioni> <file.grm>

Grammatica

Una grammatica di polygen parte sempre dal simbolo non terminale S, nella convenzione tutte le parole (sequenza di caratteri non separati da uno spazio) che iniziano per lettera maiuscola sono simboli non-terminali, e attiveranno la loro definizione. Se si vuole scrivere una parola con la lettera maiuscola ma che sia terminale, è necessario rinchiuderla tra due doppi-apici.

Il carattere _ è inteso come "stringa vuota".

Essendo una grammatica non contestuale (context-free), la parte sinistra di una regola produttiva può soltanto essere formata da un solo simbolo non-terminale.

Scelta casuale

Utilizzando l'operatore | puoi indurre una scelta casuale tra le opzioni elencate.

S ::= uno | due | tre ;

Utilizzo di simboli non-terminali

S ::= Uno Due Tre ;
Uno ::= uno | 1 ;
Due ::= due | 2 ;
Tre ::= tre | 3 ;

Sottoproduzioni

Una sottoproduzione è l'equivalente di un simbolo non-terminale dichiarato in-line, è dichiarata tra parentesi tonde.

S ::= (uno | 1) (due | 2) (tre | 3) ;

Sottoproduzioni opzionali

Una sottoproduzione opzionale è una sottoproduzione che ha il 50% di probabilità di essere eseguita, è dichiarata tra parentesi quadre.

S ::= [uno | 1] [due | 2] [tre | 3] ;

Concatenazione

Il carattere ^ indica che ciò che segue deve essere concatenato a ciò che segue senza inserire spazi (eventualmente presenti)

S ::= [uno | 1] ^ [due | 2] ^ [tre | 3] ;