Das Programm ist entstanden, um die Grundzüge einer formalen Sprachen zu verdeutlichen.
Im Compilerbau wird im wesentlichen mit contextfreien Grammatiken gearbeitet.
In der doc-Datei sind die Definitionen der verschiedenen Grammatiktypen beschrieben, wer will kann die Aufgaben auch noch lösen

.
In diesem Beispielprogramm sind die Nonterminals sind gross geschrieben.
Die Regel START -> AUSS, FRAGE, VORG, GESPR sähe in BNF so aus
<START> -> <AUSS>|<FRAGE>|<VORG>|<GESPR>, abstrahiert S -> A|F|V|G
Die Regelmenge:
START -> AUSS, FRAGE, VORG, GESPR // Aussage, Frage, Vorgang, Gespräch
AUSS -> der+WESEN+ZUST+ADJ, NAME+ZUST+ADJ // Zustand und Adjektiv
FRAGE -> " _ZUST+NAME+ADJ _?_"&+fragte+der+WESEN
VORG -> SUBJ+VERB1, SUBJ+VERB1_&+FOLGE+VERB2+SUBJ // Subjekt und Verb
GESPR -> " _AUSS_ ."&+sagte+NAME+zu+OBJ3 // Objekt
FOLGE -> danach, daraufhin, deshalb, jetzt, dann
ZUST -> ist, war
WESEN -> Hobbit, Zauberer, Ork, Balrog, Elb, Zwerg, Uruk-hai, Ent
NAME -> Frodo, Sam, Bilbo, Gandalf, Gollum, Sauron, Boromir, Baumbart, Aragorn, Eowen, Arwen // alles Terminals
SUBJ -> ein+ADJ_er+WESEN, ein+WESEN, der+WESEN, NAME
OBJ1 -> einen+ADJ_en+WESEN, einen+WESEN
OBJ2 -> einen+MSUB, eine+FSUB, ein+NSUB
OBJ3 -> einem+WESEN, einem+ADJ_en+WESEN
MSUB -> Knochen, Ring, Fisch, Schatz, Schlüssel
FSUB -> Frau, Axt, Mauer, Armbrust, Lanze
NSUB -> Schwert, Pferd, Buch
VERB1 -> erschreckte+OBJ1, verjagte+OBJ1, nahm+OBJ2, gab+NAME+OBJ2, entdeckte+OBJ1, tötet+NAME, liebt+NAME
VERB2 -> starb, verschwand, flüchtete, schrie, erwachte
ADJ -> klein, dick, stark, gefährlich, harmlos, mutig, verzweifelt, mutlos, listig, wütend, hungrig, uralt
Die Sonderzeichen +, _ und & werden am Schluss umgewandelt,+ in Lerrzeichen, _ wird gelöscht und & in ein Komma.
Je mehr die Regeln abstrahiert werden desto undurchsichtiger werden sie für Aussenstehende.
Die mitgelieferten Regeldateien sind Beispiele was alles möglich ist.
Die generierten Sätze sind syntaktisch korrekt, semantisch nicht immer
Viel Spaß beim Erfinden neuer Regeln!
Fiete
Edit: Habe das Regelformat geändert:
START -> AUSS | FRAGE | VORG | GESPR
AUSS -> der+WESEN+ZUST+ADJ | NAME+ZUST+ADJ
FRAGE -> "ZUST+NAME+ADJ?",+fragte+der+WESEN
VORG -> SUBJ+VERB1 | SUBJ+VERB1,+FOLGE+VERB2+SUBJ
GESPR -> "AUSS.",+sagte+NAME+zu+OBJ3
FOLGE -> danach | daraufhin | deshalb | jetzt | dann
ZUST -> ist | war
WESEN -> Hobbit | Zauberer | Ork | Balrog | Elb | Zwerg | Uruk-hai | Ent
NAME -> Frodo | Sam | Bilbo | Gandalf | Gollum | Sauron | Boromir | Baumbart | Aragorn | Eowen | Arwen
SUBJ -> ein+ADJer+WESEN | ein+WESEN | der+WESEN | NAME
OBJ1 -> einen+ADJen+WESEN | einen+WESEN
OBJ2 -> einen+MSUB | eine+FSUB | ein+NSUB
OBJ3 -> einem+WESEN | einem+ADJen+WESEN
MSUB -> Knochen | Ring | Fisch | Schatz | Schlüssel
FSUB -> Frau | Axt | Mauer | Armbrust | Lanze
NSUB -> Schwert | Pferd | Buch
VERB1 -> erschreckte+OBJ1 | verjagte+OBJ1 | nahm+OBJ2 | gab+NAME+OBJ2 | entdeckte+OBJ1 | tötet+NAME | liebt+NAME
VERB2 -> starb | verschwand | flüchtete | schrie | erwachte
ADJ -> klein | dick | stark | gefährlich | harmlos | mutig | verzweifelt | mutlos | listig | wütend | hungrig | uralt
als Sonderzeichen gibt es nur noch '+', ist mir zu spät eingefallen
