Ergebnis 1 bis 20 von 72

Thema: Contest: Interpretieren einer Datei

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Zitat Zitat von Feenstaub
    Und bei anderen doppeldeutigen Token? zB: %operator%:&|||:|^

    Sollen diese aus dem Kontext heraus erkannt werden? Oder gilt das %-Zeichen generell als literal Definition?

    Küsschen,
    Feenstaub.
    Jetzt weiß ich, worauf du hinauswillst. Glaube ich.
    %Gewinn%:100%|50%|nichts würde einen Fehler erzeugen, weil da ein | im Variablennamen steht - die dürfen aber nur alphanumerisch sein.
    %operator%:&|||:|^ ist in Ordnung. Es ist absolut okay, wenn mehrmals der gleiche Wert vorkommt (er ist dann eben wahrscheinlicher) und der Doppelpunkt hat nur am Anfang der Zeile eine Funktion. Danach gilt er als normales Zeichen.
    %operator%|:Wert würde einen Fehler erzeugen. Die Zeilen fangen mit einem Variablennamen und einem Doppelpunkt an, das tut diese nicht.


    @Sunny: Warum? Es gibt nur zwei Zeichen, die irgendeine Bedeutung haben und das sind % (das mit der %%-Regelung problemlos dargestellt werden kann) und | (das bisher nicht dergestellt werden kann - das korrigiere ich mal, bevor sich noch jemand aufregt).
    Ich könnte natürlich die Anregung aufnehmen und verlangen, daß jeder Interpreter eine $[xxxx]-Funktion beinhaltet, wobei xxxx der Hexcode für ein Unicode-Zeichen ist. Andererseits müßte ich das ja auch programmieren.

    Geändert von Jesus_666 (31.03.2005 um 01:15 Uhr)

  2. #2

    Users Awaiting Email Confirmation

    Zitat Zitat von Jesus
    Jetzt weiß ich, worauf du hinauswillst. Glaube ich.
    %Gewinn%:100%|50%|nichts würde einen Fehler erzeugen, weil da ein | im Variablennamen steht - die dürfen aber nur alphanumerisch sein.
    %operator%:&|||^ ist in Ordnung. Es ist absolut okay, wenn mehrmals der gleiche Wert vorkommt (er ist dann eben wahrscheinlicher) und der Doppelpunkt hat nur am Anfang der Zeile eine Funktion. Danach gilt er als normales Zeichen.
    %operator%|:Wert würde einen Fehler erzeugen. Die Zeilen fangen mit einem Variablennamen und einem Doppelpunkt an, das tut diese nicht.
    Ä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" ^^)

    Ich habe meine Arbeit begonnen, indem ich mir deine Beispiele angeschaut habe:


    [FONT=Courier New]Ich habe eine%Tier%.
    %Tier%:n Hund| Katze
    [/FONT]

    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!


    [FONT=Courier New]OMG LOL%weiter%
    %weiter%:!%weiter%|1%weiter%|
    [/font]

    Hier schreibst du, dass hinter dem letzten "|" die leere Menge spezifiziert ist. Das heisst für mich: A) Eine leere Menge ist erlaubt. B) Die leere Menge ist definiert mit "kein Zeichen". C) Als letztes Zeichen in der Variablendeklaration steht entweder ein "|", dass die leere Menge mit einschliesst, oder der letzte Buchstabe eines echten Wertes (ein String).

    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?


    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.

    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.

    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...

  3. #3
    Zitat Zitat von Feenstaub
    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]
    Bin zwar nicht Jesus, aber ich erklär's mal so wie ich's verstanden hab:
    Man muss sich die Definition auf der ersten Seite eben mehrmals durchlesen, da Jesus sie immer wieder verändert. Ich zitiere:
    Zitat Zitat von Jesus_666
    Wenn man einen Querstrich schreiben will, dann verwendet man %|%. Das ist die einzige Möglichkeit, ein nicht-alphanumerisches Zeichen zwischen zwei Prozentzeichen zu tun.
    Dein genanntes Beispiel würde also eine Variable mit vier leeren Mengen initialisieren, also so:
    [FONT=Courier New]%VarName%:(Leere Menge)|(Leere Menge)|(Leere Menge)|(Leere Menge)[/font]

    Für ein |-Zeichen müsste der Code also so aussehen:
    [FONT=Courier New]%Varname%:%|%[/font].

    Zitat Zitat von Feenstaub
    und was ist: [FONT=Courier New][%VarName%:][/font]? Eine Variable, die nur die leere Menge enthält? Oder ist das syntaktisch falsch?
    Ich denke mal das ist einfach ne leere Menge. Warum auch nicht?
    Zitat Zitat von Feenstaub
    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]
    Ja, so einen Schluss-Punkt fände ich auch gut und so.

    freundliche Grüße, Rolus

    Geändert von Rolus (31.03.2005 um 12:08 Uhr)

  4. #4
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •