質問

W3Cに基づいて、コンパイラジェネレーターを使用してXML翻訳者を実装するというアイデアを考えています XML 1.1 完全なEBNF文法を含む仕様。

より正確には、私は使用する予定です Qi-yacc このツールを学びたいからです。これは、コンパイラコンパイラを使用する私の最初の進出になります。

私が実装することを計画している最初の種類の翻訳は非常に簡単です:xml S-Exprs. 。その後、翻訳者を一般化する予定ですが、これは私の質問のポイントではありません。

この種のプロジェクトに大きな落とし穴があると予想していますか? XMLをEBNFを使用して翻訳することを読みました 悪い考え. 。なぜだろうか。そして、それはQI言語がすでにXMLパーサーを持っていたようなものではないので、私は間違いなくここでホイールを再発明するつもりはありません。

役に立ちましたか?

解決

XMLを解析するためにコンテキストが必要な理由は今ではありません。

ただし、Qiyaccはグローバル変数を使用してコンテキストを使用できます。パーサーなどの状態を通過することができれば、よりきれいになります。これはQIではありませんが、Shenのこのような機能を実装する予定です。

だからそれをすることができます。

/ステファン

他のヒント

私はQiyaccについては何も知りませんが、XMLのEBNFを再帰降下(RD)パーサーに翻訳することは多かれ少なかれ簡単です。文法の小さな微調整がパーサーに大きなパフォーマンスに影響を与える可能性がある場所があるという事実に留意する必要があります。これは、文法がルールを追いかけることを避けようとするのではなく、簡潔さと明確さを念頭に置いて書かれているためです。

私は、XMLの文法をタイプのセットとして書くことで、C ++でこのようなことをしました。あなたは私が書いた記事をで見ることができます コードプロジェクト. 。同じ基本原則を任意の言語に適用できます。

また、ペグ文法を見ることをお勧めします。彼らは、あなたがゼロ幅の主張を導入できるようにすることでEBNFに拡張され、パーサーのためにEBNF文法を強化する素晴らしい方法です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top