Frage

Ich denke über die Idee nach, einen XML -Übersetzer mit einem Compiler -Generator zu implementieren, basierend auf den W3Cs XML 1.1 Spezifikation, das eine vollständige EBNF -Grammatik enthält.

Genauer gesagt habe ich vor, zu verwenden Qi-yacc Weil ich dieses Tool lernen möchte. Es wird mein erster Ausflug in die Verwendung eines Compiler-Compiler sein.

Die erste Art von Übersetzung, die ich implementieren möchte, ist sehr einfach: xml zu S-Exprs. Danach plane ich, meinen Übersetzer zu verallgemeinern, aber dies ist nicht der Punkt meiner Frage.

Erwarten Sie eine größere Gefahr für diese Art von Projekt? Ich habe gelesen, dass das Übersetzen von XML mit seinem EBNF ist eine schlechte Idee. Ich wundere mich warum. Und es ist nicht so, dass die Qi -Sprache bereits einen XML -Parser hatte, also möchte ich das Rad hier definitiv nicht neu erfinden.

War es hilfreich?

Lösung

Ich bin jetzt nicht der Grund, warum Kontext erforderlich ist, um XML zu analysieren.

QiyACC kann jedoch den Kontext mit globalen Variablen verwenden. Es wäre sauberer, wenn Sie im Parser oder so einen Staat S, S übergeben könnten. Dies ist nicht in Qi, aber ich habe vor, eine solche Funktion für Shen umzusetzen.

So könnte es getan werden.

/Stefan

Andere Tipps

Ich weiß nichts von Qiyacc, aber die Übersetzung eines EBNF von XML in einen rekursiven Abstieg (RD) -Parser ist mehr oder weniger unkompliziert. Man muss nur berücksichtigen, dass es Orte gibt, an denen einige kleine Änderungen an der Grammatik einen großen Auswirkungen auf den Parser haben können. Dies liegt daran, dass die Grammatiken mit Blick auf die Prägnanz und Klarheit geschrieben sind, anstatt zu versuchen, Regeln zu verfolgen.

Ich habe so etwas einmal in C ++ gemacht, indem ich die Grammatik von XML als eine Reihe von Typen geschrieben habe. Sie können einen Artikel sehen, den ich darüber geschrieben habe Codeprojekt. Die gleichen Grundprinzipien können auf jede Sprache angewendet werden.

Ich würde auch vorschlagen, dass Sie sich in Peg -Grammatiken umsehen. Sie erstrecken sich auf EBNF, indem sie es Ihnen ermöglichen, keine Width-Behauptungen einzuführen, und sind eine großartige Möglichkeit, eine EBNF-Grammatik für einen Parser zu erweitern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top