[linux-l] Grammar Design

Volker Grabsch vog at notjusthosting.com
Fr Sep 16 17:48:03 CEST 2005


On Fri, Sep 16, 2005 at 03:01:10PM +0200, Oliver Bandel wrote:
> On Sat, Jul 09, 2005 at 01:49:33AM +0200, Oliver Bandel wrote:
> > Also: Wie entwirft man auf elegante und effiziente/schnelle Weise
> >      eine Grammatik, ohne sich all zu oft in Parser-Konflikten
> >      zu verlieren.
> 
> Nach Auskunft einiger Leute mit Peilung gibt's da oftmals nur eins:
> so weit wie möglich sich klar werden, was man implementieren will,
> am besten sich mal ne Beispielsyntax anfertigen und dann loslegen.
> ggf. mehrfaches redesign bzw. neues Konzept.

Dem kann ich mir nur anschließen. Übrigens hatten wir an der Uni zwar
"Compilerbau", dort war allerdings unsere Sprache schon detailliert
vorgegeben.

> Naja, also habe ich mal etwas herum experimentiert mit einem
> Progrämmchen, das pdf's generiert (speziell für Tanzbereich/Bewegungsanalyse).

Ich habe, abgesehen von dem Compiler für die Uni, auch noch einen
Interpreter für eine eigene Sprache geschrieben, die speziell für
IRC-Bots gedacht ist:
	http://davis.sf.net/

Allerdings habe ich dort alles "per Hand" gemacht. Das war noch zu
Schulzeiten.

Momentan stehe ich wieder kurz vor einem Projekt, wo ich das brauche:
	http://wikidok.njh6.de/

Gerade wegen dem vielen Ausprobieren und Redesign sind mir lex/yacc
einfach zu aufwändig. Deshalb habe ich mich vorerst für "pyparser"
entschieden. Das ist eine Python-Bibliothek, mit der man Grammatiken
nochmals sehr viel einfacher beschreiben kann. Ich wende also
"Rapid Prototyping" an. Auch der Rest des Programmes ist in Python
erstmal besser aufgehoben als in C. Wenn alles läuft, kann ich mir
immer noch überlegen, ob die Sache nochmals mittels lex/yacc neu
zu implementieren, aber meistens ist dieser Schritt gar nicht nötig,
weil Python schon genug Performance liefert.

Doch selbst wenn feststeht, dass du es in C machen willst, rate ich
dennoch an, gerade diese Ausprobieren/Verwerfen - Phase mit besseren,
einfacheren Tools zu beschreiten (z.B. mit pyparser). Danach die Sache
nach lex/yacc zu bringen (besser gesagt: flex/bison), ist mehr oder
weniger trivial, also IMHO das kleinere Übel.


Viele Grüße,

	Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l