[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