2016-04-15 3 views
0

J'ai été intéressé à apprendre à écrire un JetBrains plugin pendant un moment maintenant et aujourd'hui j'ai décidé de finalement l'essayer. Fondamentalement, j'ajoute le support de la langue pour les documents SVG, car le support du langage XML intégré ne peut pas gérer les balises/attributs qui utilisent l'espace de noms xlink: au sein de SVG.Existe-t-il un moyen de générer un fichier BNF à partir d'une DTD?

Donc je travaille mon chemin à travers le custom language support tutorial et je suis arrivé à step 3.3 - define grammar. Fondamentalement, je suis destiné à créer un fichier BNF pour définir la grammaire utilisée dans les documents SVG. Le problème est que grammaire SVG prendrait une éternité à définir rigoureusement. Ce que je voudrais faire est de générer ce document BNF automatiquement à partir du SVG Document Type Definition, parce que cette DTD devrait contenir suffisamment d'informations pour définir complètement la grammaire de SVG (je présume).

Y at-il un moyen de convertir un DTD en un BNF?

+0

http://www.w3.org/XML/2000/04schema-hacking/dtd2bnf pourrait être un bon point de départ. – bitfiddler

+0

@bitfiddler Essayé mais échoué. Ce script n'a aucune documentation sur la façon de l'utiliser, que ce soit dans la ligne de commande ou dans les commentaires. –

Répondre

0

Je ne connais aucun outil disponible sur le marché; Si vous avez des compétences XSLT, il serait facile d'utiliser l'un des divers outils qui traduisent les DTD en XML (parfois en XSD ou RNG, parfois juste en une représentation XML de la structure DTD), puis d'écrire une transformation XSLT pour aller dans le format de grammaire dont vous avez besoin pour vos besoins.

Permettre à des attributs XML d'apparaître dans n'importe quel ordre sans inclure de noms d'attributs en double est plutôt fastidieux dans BNF; vous pouvez choisir d'appliquer l'interdiction contre les noms d'attributs en double à un niveau différent de votre logiciel.