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-css https://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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.