Zitat Zitat von Feenstaub
Ähm... nicht so ganz. Ich drück' mich wohl nicht richtig aus. Sorry. Ich versuche es nochmal. (Das Problem ist, dass du die Sprache in Satzform definiert hast, anstatt vielleicht BNF oder Syntaxdiagramme... dadurch wäre die Grammatik "durchschaubarer" ^^)
Wenn ich erst noch allen hier die (E)BNF beibringen wollte wäre der Anfangspost mindestens dreimal so lang - und die Nachbesprechung auch. Erstaunlicherweise ist es ziemlich schwer, anderen Leuten das beizubringen, was man an der Uni gelernt hat.

Ursprünglich sollte der Contest sich mit der Simulation eines deterministischen endlichen Automaten befassen. Nachdem ich Luki mit meinen Erklärungsversuchen, was ein DEA tut, völlig verwirrt habe hab' ich das dann lieber doch gelassen.

Zitat Zitat
Das Leerzeichen vor Katze hat mir gesagt, dass das "|"-Zeichen die Trennung der Variablenwerte vornimmt. Nur so macht der Satz: "Ich habe eine(Leerzeichen)Katze." Sinn. Also habe ich mir gesagt. Das "|" trennt die einzelnen Werte KONKRET. Sprich, die Werte werden nicht links und rechts getrimmt!
Das kommt so hin.

Zitat Zitat
Das führt aber zu folgender Doppeldeutigkeit:
[FONT=Courier New]%VarName%:|||[/font]
kann entweder heissen:
[FONT=Courier New]|(Leere Menge)|(Leere Menge)|[/font]
oder aber:
[FONT=Courier New]|("|"-Zeichen)|[/font]

und was ist: [FONT=Courier New][%VarName%:][/font]? Eine Variable, die nur die leere Menge enthält? Oder ist das syntaktisch falsch?
Zu ersterem: Das | war nicht als druckbares Zeichen vorgesehen. Für den Fall, daß jemand es doch ausgeben will habe ich in den Regeln den Sonderfall %|% eingeführt.
Zu letzterem: %VarName%: würde ich tatsächlich als eine Variable, die nur ein leeres Wort enthält, betrachten.

BTW, du kannst statt dem [font]-Tag auch den [tt]-Tag verwenden, den es seit Kurzem gibt. Der ist plattformunabhängiger (nicht jedes Betriebssystem muß eine Courier New-Schriftart haben).

Zitat Zitat
Und dann gibt esnoch etwas, dass zwar kein wirkliches Problem ist, aber die Nutzung zusäzlich erschwert. Auf Grund der Textdatei lässt sich nicht immer genau sagen, wie der Wert wirklich aussieht:

[FONT=Courier New]Das%tier%ist alt.
%tier%:| Pferd | Schaf
[/font]

Hier habe ich hinter Schaf noch ein Leerzeichen. Im Text sieht man das aber nicht. Trotzdem ist die Syntax grundsätzlich richtig. Vielleicht sollte man ein Ende-Zeichen einführen? zB einen Punkt:

[FONT=Courier New]Das%tier%ist%fuellwort%alt.
%tier%:| Pferd | Schaf .
%fuellwort%: sehr | noch nicht .
[/font]

Aber das ist nur ein formeller Hinweis. ;)
Stimmt, allzu lesbar ist mein Format nicht. Ich mache trotzdem keine Zeilenenden rein, das wäre in erster Linie eine kosmetische Veränderung.

Zitat Zitat
Zurück zu deinen Anforderungen. Von meinem bescheidenen Verständnis sähe die Variablendeklaration in EBNF etwa so aus:
Code:
VarDecl := "%" VarName "%" ":" (Value "|")* Value.
VarName := AlNum+.
AlNum   := Alpha | Num.
Alpha   := 'A'|'B'...'Y'|'Z|'a'|'b'...'y'|'z'.
Num     := '0' | '1' ... '8' | '9'.
Value   := AnyChar*.
Ist das so richtig? Und wie sollen wir vorgehen, wenn "AnyChar" ein '|' enthält?

Küsschen,
Feenstaub.
Habe ich schon in den Regeln festgelegt, nach meinem letzten Post. %|%. Ist zwar etwas häßlich, aber ich bin nie davon ausgegangen, daß jemand ein | ausgeben will...

Zitat Zitat
p.s. Sorry für den langen Post, aber Compilerbau war eine meiner Lieblingsthemen... damals... vor langer, langer Zeit... in einer weit, weit entfernten Galaxie...
(E)BNF ist auf jeden Fall ein besseres Thema als Programmsemantik.