Ihr kennt sicher alle solche Syntaxdiagramme, wie z.B. die auf json.org:
https://www.json.org/json-en.html
Optional kann man als eine Linie drum herum abbilden. Zum beliebig often
Wiederholen eine Schleife zeichnen.
Jetzt mache ich einen ABNF -> Syntaxdiagram Konverter. In ABNF kann ich
aber auch Sachen angeben, wie z.B. 5*10"X" (Wiederhole X min 5 mal, max
10 mal).
Wie sollte ich sowas abbilden? Einfach ignorieren und als Schleife? Oder
bei der Schleife noch die Nummer hinschreiben? Wäre aber beides nicht
wirklich klar / intuitiv. Ich könnte den teil auch einfach entsprechend
oft wiederholen, aber das bläht die Diagramme auf und ist
unübersichtlich. Wie würdet ihr das machen?
Du versuchst, eine mächtigere in eine weniger mächtige Sprache zu
übersetzen. Das geht entweder
- gar nicht,
- nur mit Verrenkungen (wie bspw. "den teil […] einfach entsprechend oft
wiederholen, aber das bläht die Diagramme auf und ist
unübersichtlich") oder
- durch Erweiterung der weniger mächtigen Sprache (wie bspw. "bei der
Schleife noch die Nummer hinschreiben? Wäre aber […] nicht wirklich
klar / intuitiv.").
Ich an deiner Stelle würde ABNF einfach ABNF bleiben lassen. Was bringt
eine Übersetzung in Syntaxdiagramme? Diese sehen zwar lustig aus,
bringen IMHO aber keinen realen Nutzen, sondern – wie du selbst bereits
festgestellt hast – vor allem Nachteile. Ein weiterer Nachteil gegenüber
ABNF ist vor allem der wesentlich höhere Platzbedarf. Eine Grammatik,
die in ABNF auf einer Seite dargestellt werden kann, benötigt in Form
von Syntaxdiagrammen mindestens drei Seiten.
Ein Kompromiss wäre die Erläuterung von nicht in Syntaxdiagrammen
darstellbaren Eigenschaften der Grammatik in Fußnoten, so wie hier
vorgeschlagen:
https://www.ibm.com/docs/en/zvse/6.2?topic=SSB27H_6.2.0/fa2sc_r_understanding_syntax.html
Diese Fußnoten stellen sozusagen eine halbformale Erweiterung der
Syntaxdiagramme dar und sind leicht zu verstehen, da sie praktisch jedem
aus anderen Kontexten bekannt sind.
Yalu X. schrieb:> Ich an deiner Stelle würde ABNF einfach ABNF bleiben lassen. Was bringt> eine Übersetzung in Syntaxdiagramme?
Es sieht nicht nur besser aus, es ist auch einfacher zu verstehen &
lesen. Ich lese auch lieber ein PDF, als eine LaTeX Datei im Texteditor.
Wenn man anhand dessen einen Top-Down Parser schreibt, ist das euch
einfacher. Da sieht man dann auf einen Blick, welche Token als nächstes
kommen können. Bei ABNF muss man da erstmal nachdenken.
Ausserdem ist das Ding schon zu 80% fertig, da höre ich jetzt nicht auf
den letzten Metern damit auf.
Und auch wenn der Nutzen sich in grenzen hält, es ist auch für sich
genommen schon ein interessantes Projekt.
Ich habe ein Python Script, das konvertiert das ABNF zu XHTML. Eine Node
pro Token, und eine pro Gruppe (eine Gruppe enthält entweder eine
Sequenz von Token oder Gruppen, oder eine Liste alternativer Token oder
Gruppen). Und jede Node hat noch 2 Attribute für die Anzahl, und eine
Klasse falls optional. Quasi ein 1:1 Mapping von ABNF zu XML, keine
extra Nodes nur um etwas darzustellen. Damit könnte ich auch manuell
extrem einfach solche Diagramme direkt in XHTML schreiben. Darstellung,
zeichnen aller Linien & Layout, mache ich 100% per CSS, so wie das
eigentlich immer sein sollte. Ist nicht ganz trivial, momentan bin ich
an der 3ten Iteration des CSS Codes, aber diesmal passt alles.
Dieses Syntaxdiagramm lag für C als A3 Zeichnung dem ersten K&R Buch
bei.
Ein Grund, warum ich mir das Buch noch aufhebe.
Benutzt habe ich es allerdings nie. Da nehme ich doch lieber eine
richtige Grammatik, als mich mit der 'Eisenbahn' zu beschätigen.
Von daher finde ich das Projekt auch nicht wirklich sinnig.
Wenn ich Eisenbahn will, dann geh ich ins Wohnzimmer. Da fährt eine LGB.
PittyJ schrieb:> Dieses Syntaxdiagramm lag für C als A3 Zeichnung dem ersten K&R Buch> bei.> Ein Grund, warum ich mir das Buch noch aufhebe.
Na da haben wir ja noch ein guter Grund, Syntaxdiagramme zu erstellen.
Damit lässt sich ein Format / eine Sprache, besser verkaufen, als mit
dem einer langweiligen nicht-graphischen Notation.
PittyJ schrieb:> Benutzt habe ich es allerdings nie. Da nehme ich doch lieber eine> richtige Grammatik, als mich mit der 'Eisenbahn' zu beschäftigen.
Beim entwerfen einer Sprache oder eines Format (also noch vor der ersten
Implementation), finde ich die Diagramme aber auch schon recht nützlich.
Da sieht man schnell, wenn mal etwas nicht eindeutig ist, nicht einfach
zu erkennen, oder man irgendwo was vergessen hat oder sonstigen Mist
gebaut hat.
Und bezüglich "richtige Grammatik", ich generiere die Diagramme ja aus
ABNF, das ist eine "richtige Grammatik". Die Diagramme sind danach quasi
ein gratis Bonus.
Ich bin zwar noch nicht dazu gekommen, etwas wegen der Wiederholungen zu
machen, aber ich habe das css mal etwas aufgeräumt, grob dokumentiert
und hochgeladen:
https://github.com/Daniel-Abrecht/railroad-csshttps://daniel-abrecht.github.io/railroad-css/
Ich muss zwar noch ein paar weitere Sachen Dokumentieren, z.B. die all
die einstellbaren CSS Variablen usw. (beinhaltet Farben, abstände, usw.)
Eventuell kann es ja noch jemand brauchen.