Forum: PC-Programmierung Railroad / Syntaxdiagramme wie X..Y Wiederholungen darstellen?


von 🐧 DPA 🐧 (Gast)


Lesenswert?

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?

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von 🐧 DPA 🐧 (Gast)


Lesenswert?

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.

von PittyJ (Gast)


Lesenswert?

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.

von 🐧 DPA 🐧 (Gast)


Lesenswert?

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.

von 🐧 DPA 🐧 (Gast)


Lesenswert?

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.

von Daniel A. (daniel-a)


Lesenswert?

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
Noch kein Account? Hier anmelden.