Question

Je contemple l'idée de mettre en œuvre un traducteur XML en utilisant un générateur de compilateur, sur la base du W3C spécifications XML 1.1 , qui comprend une grammaire EBNF complète.

Plus précisément, je prévois d'utiliser Qi-YACC parce que je veux apprendre cet outil. Ce sera ma première incursion dans le compilateur utiliser un compilateur.

Le premier type de traduction Je prévois de mettre en œuvre est très simple: XML S- EXPRs . Par la suite, je prévois de généraliser mon traducteur, mais ce n'est pas le point de ma question.

Prévoyez-vous écueil majeur pour ce genre de projet? J'ai lu que la traduction de XML en utilisant son EBNF est une mauvaise idée . Je me demande pourquoi. Et c'est pas comme la langue Qi avait déjà un analyseur XML, donc je suis à la recherche certainement pas de réinventer la roue.

Était-ce utile?

La solution

Je ne maintenant la raison pour laquelle le contexte est nécessaire pour analyser XML.

Mais QiYacc peut utiliser le contexte en utilisant des variables globales. Il serait plus propre si vous pouvez passer d'un état, S, dans l'analyseur par exemple ou quelque chose comme ça. Ce n'est pas en Qi mais je prévois de mettre en œuvre une telle fonctionnalité pour Shen.

On peut donc faire.

/ Stefan

Autres conseils

Je ne sais rien de QiYACC, mais la traduction d'un EBNF de XML dans un analyseur de descente récursive (RD) est plus ou moins simple. Il suffit juste de garder à l'esprit le fait qu'il ya des endroits où quelques petites modifications à la grammaire peut avoir un impact sur les performances de l'analyseur. En effet, les grammaires sont écrits avec concision et clarté à l'esprit, plutôt que d'essayer d'éviter la poursuite des règles.

Je l'ai fait quelque chose comme ça une fois en C ++ en écrivant la grammaire de XML comme un ensemble de types. Vous pouvez voir un article écrit sur ce Code du projet . Les mêmes principes de base peuvent être appliqués à toutes les langues.

Je vous suggère également vous regardez autour de PEG grammaires. Ils étendent sur EBNF en vous permettant d'introduire des assertions de longueur nulle, et sont une excellente façon d'augmenter une grammaire EBNF pour un analyseur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top