2016-04-15 27 views
0

Ich wollte schon seit einiger Zeit lernen, ein JetBrains plugin zu schreiben und heute habe ich beschlossen, es endlich einmal zu versuchen. Grundsätzlich füge ich Sprachunterstützung für SVG-Dokumente hinzu, da die integrierte Unterstützung für XML-Sprachen keine Tags/Attribute verarbeiten kann, die den xlink:-Namespace in SVG verwenden.Gibt es eine Möglichkeit, eine BNF-Datei von einer DTD zu generieren?

Also arbeite ich meinen Weg durch die custom language support tutorial und ich bin zu step 3.3 - define grammar bekommen. Grundsätzlich soll ich eine BNF-Datei erstellen, um die in SVG-Dokumenten verwendete Grammatik zu definieren. Das Problem ist, dass SVG Grammatik würde ewig dauern, um streng zu definieren.

Was ich tun möchte, ist dieses BNF-Dokument automatisch aus der SVG Document Type Definition generieren, weil diese DTD genügend Informationen enthalten sollte, um die Grammatik von SVG vollständig zu definieren (ich vermute).

Gibt es eine Möglichkeit, eine DTD in eine BNF zu konvertieren?

+0

http://www.w3.org/XML/2000/04schema-hacking/dtd2bnf könnte ein guter Anfang sein. – bitfiddler

+0

@bitfiddler Versucht, aber fehlgeschlagen. Dieses Skript enthält keine Dokumentation zur Verwendung in der Befehlszeile oder in den Kommentaren. –

Antwort

0

Ich kenne keine Standardwerkzeuge; Wenn Sie XSLT-Kenntnisse haben, wäre es einfach, eines der verschiedenen Tools zu verwenden, die DTDs in XML-Form (manchmal in XSD oder RNG, manchmal nur in eine XML-Darstellung der DTD-Struktur) übersetzen und dann eine XSLT-Transformation schreiben in das Grammatikformat, das du für deine Zwecke brauchst.

Das Zulassen, dass XML-Attribute in beliebiger Reihenfolge angezeigt werden, aber doppelte Attributnamen nicht enthalten, ist in BNF ziemlich mühsam; Sie können das Verbot gegen doppelte Attributnamen auf einer anderen Ebene Ihrer Software erzwingen.