[linux-l] Grammar Design
Ihno Krumreich
ihno at lst.de
Mo Jul 11 12:24:57 CEST 2005
>
>
> > Bisher handelte es sich dabei um Konfigurationsdateien
> > (eigen und fremddesign).
>
> Bisher noch nicht. Vielleicht wird das mal notwendig.
> Aber sowas w?rde ich vermutlich ?ber einen Sprachinternen "loadconfig"-
> Befehl oder so realisieren.
Ich meinte eigentlich, das ich Parser geschrieben habe um
Konfigurationsdateien einzulesen. Nicht um den Parser zu konfigurieren
(was man natuerlich auch machen kann.)
> >
> > Was fuer Eigenschaften soll den deine Sprache haben?
>
> Es sollen ja mehrere Sprachen werden.
>
Was heist mehrere Sprachen? Merhrere Frontends oder mehrere Backends?
Und alle haben den gleichen Kern?.
> Aber ich habe gestern mal mit was angefangen, das mir das Gestalten
> von komplizierten Layouts drastisch vereinfacht.
> So eine Art Preprozessor zu Lout (oder sp?ter LaTeX oder direkt Postscript).
>
>
> >
> > - Wird einmal ein Konfigurationsdatei eingelesen?
>
> Bisher nicht geplant.
>
>
> > - Soll ein "Programm" eingelesen werden, das hinterher interpretiert wird?
>
> Das ist der Hauptschwerpunkt erst mal.
D.h. Es gibt:
- Parser
- Syntaxanalyse
- gegebenenfalls Semantikanalyse
- Interpreter
>
>
> > - Oder sollen fortlaufend Daten eingelesen und verarbeitet werden?
>
> Sp?tere Sprachen sollen auch das mal tun. Also entweder als Streamingfilter
> oder wie man das nennen mag.
>
>
> Erst mal soll ein Programm eingelesen und verarbeitet werden.
>
>
> >
> > Ich habe es bisher immer so gemacht, das ich Funktionsbloecke
> > definiert habe, die ich dann immer weiter verfeinert habe.
>
> Funktionsbl?cke.... hast Du das so angedacht, da? Du das mit einer
> speziellen Syntax vorgibst, also da? Du mit einem Befehl pro
> Funktionsblock sozusagen Sub-Grammatiken aufgebaut hast, und
> dann sp?ter weitere hinzugef?gt hast?
yacc unterscheided ja auch zwischen Nichtterminalsymbolen und
Terminalsymbolen.
>
> Wie sieht es mit Datentypen aus?
> Sollte man das als erstes ansetzen (um die terminalen Symbole
> schon mal f?r den lexer vorab festgelegt zu haben?).
>
> Noch bevor man Funktionsbl?cke zusammen baut?
>
> Andererseits braucht eine bestimmte Funktionalit?t ja automatisch bestimmte
> Typen von Daten (also Stringbasiert, oder auch Arithemtik oder so...).
>
Die ergeben sich doch automatisch wenn man bei den Terminalsymbolen
angekommen ist.
>
>
> > Parallel zur Sprache muss ja auch die Datenstruktur definiert
> > werden. Damit man sich hinterher nicht selbst ein
> > Bein stellt.
> [...]
>
>
> naja, die ersten Experimente f?r meinen "Lout-Preprozessor" bzw.
> Layout-Generator sahen so aus, da? ich die Konvertierung gleich
> in der yacc-Grammar erzeugt habe.
>
> Aber sp?testens (vermutlich schon viel fr?her), wenn ich auch nach LaTeX
> konvertieren m?chte, bzw. wenn ich einfach nur flexibel sein will,
> brauche ich wohl ne eigene Datenstruktur, anstatt die Ergebnisse
> nur von unten nach oben in der jew. yacc-Action nach oben zu reichen.
>
> Das Teil kann mir derzeit die Befehle "above" "below" "rightof" "leftof"
> ausf?hren, ich kann stringvariablen definieren, habe die M?glichkeit,
> Definitionen bzw. Anordnungen der Textboxes mit Klammern zu Priorisieren...
>
> Wenn ich zwei vordefinierte Layoutabschnitte (mit beliebiger Definition)
> vertauschen will, brauche ich z.B. nur ein "rightof" durch ein "above"
> austauschen und statt rechts-daneben (eben dem anderen "Objekt")
> erscheint es dann oberhalb.
>
> Ist also schon ganz schnuckelig.
>
> Nur: Wie gestalte ich es mit Priorit?ten, etc. ...
Was heisst Prioritaet?
> ...mu? ja ggf. auch sp?ter an verschiedene Ausgabeformate
> (lout, LaTeX, TeX, Postscript, ...) angepasst werden.
Das ist nur das Backend und hat mit deiner Sprache wenig bis nichts zu
tun.
>
> Dann will ich da auch Sachen wie Alignment (center, left, right,...)
> einbauen.
> Das kann dann doch recht komplex werden.
>
> Wo mu? ich da auf bestimmte probleme achten, wo kann mir was auf die
> F??e fallen?
> Welche Art von Datentypen brauche ich in der Sprahce und wie
> repr?sentiere ich es innerhalb.
Die Frage ist, wie du angibst was dein Objekt ist und wo die
Eigenschaften des Objekts definiert werden.
>
> Arbeite ich eher mit Umgebungen, oder soll ich es eher OO-m??ig auslegen?
> Evtl. beides, und man kann dann ggf. priorisieren (in welcher Weise)?
>
Keine Ahnung wovon du redest.
> Die Sache mit den rekursiven Syntax-Beschreibungen mu? ich mir anscheinend
> auch noch mal rein ziehen (und die yacc-Ambiguities)....
>
Das ist der Knackpunkt. Die Grammatik so zu schreiben das sie
Epsilon-frei ist (also es kein Nichtterminal gibt das zu einem leeren
Ausdruck abgeleitet werden kann).
> Fragen ?ber Fragen... ...bin aber froh, da? ich Samstag das immerhin so weit
> schon hin gekriegt habe, da? das schon mal mit dem Konverter und Lout auch
> zu ersten Ergebnissen in Form von Postscript-Ausgabe gereichte... :)
>
> Es funktioniert schon mal in der minimalen Form, aber die ist halt nicht
> ausreichend, um damit schon mal sehr komplexe Layouts einfach zu gestalten.
> Da fehlt es noch so an Box-Internen Alignment-Funktionalit?ten usw.
> (Nimmt aber bereits jetzt schon sichtlich Arbeit ab f?r den bereich, der schon
> m?glich ist...)
>
> Beispiel:
> =================
> monday = "Montag" above "Aufstehen" above "Kaffee kochen" above "arbeiten" above "schlafen gehen"
> tuesday = "Dienstag" above "Ausschlafen" below "schlafe noch"
>
> monday leftof (tuesday)
> end
> =================
>
> Zwei Boxdefinitionen mit den Layoutanweisungen f?r die Boxes.
> Dann die Konstruktion der Ausgabe des Layouts.
> Dann den (bisher notwenigen) Ende-Marker, der die Ausgabe antriggert.
> (M?sste ich nochmal schauen, ob ich das via eof steuere oder so.)
>
> Ergebnis in lout w?re dann:
>
> =================
> @SysInclude {doc}
>
> @Doc
> @Text @Begin
>
> monday = "Montag" above "Aufstehen" above "Kaffee kochen" above "arbeiten" above "schlafen gehen"
> tuesday = "Dienstag" above "Ausschlafen" below "schlafe noch"
>
> monday leftof (tuesday)
> end
> {{"Montag"} /1.0f "Aufstehen" /1.0f "Kaffee kochen" /1.0f "arbeiten" /1.0f "schlafen gehen"} |1.0f {"schlafe noch" /1.0f {"Dienstag"} /1.0f "Ausschlafen"}
>
>
> @End @Text
> =================
>
> Ergebis in Postscript spare ich mir angesichts der L?nge... ;-)
>
>
> Naja, so ungef?hr halt.... und wie sieht es denn aus mit Spracherrweiterungen?
Haengt davon ab, wo man erweitern will.
> Kann man die schonb vorab gut ber?cksichtigen?
Klar.
> Oder mu? man dann ggf. alles wieder umbauen?
>
Nein.
Gruss
Ihno
Mehr Informationen über die Mailingliste linux-l