3

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

より正確には、このツールを学びたいので、Qi-YACCを使用する予定です。これは、コンパイラ-コンパイラを使用する最初の試みです。

私が実装しようとしている最初の種類の変換は、非常に簡単です: XML からS-EXPRsへ。その後、翻訳者を一般化する予定ですが、これは私の質問のポイントではありません。

この種のプロジェクトに何か大きな落とし穴があると思いますか? EBNF を使用して XML を翻訳するのは悪い考えだと読んだことがあります。なぜだろう。また、Qi 言語に既に XML パーサーがあったわけではないので、ここで車輪を再発明するつもりはまったくありません。

4

2 に答える 2

3

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

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

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

/ステファン

于 2009-09-05T09:41:10.983 に答える
1

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

XML の文法を一連の型として書き出すことで、C++ でこのようなことをしたことがあります。Code Projectで私が書いた記事を見ることができます。どの言語にも同じ基本原則を適用できます。

また、PEG文法を調べてみることをお勧めします。これらは、ゼロ幅アサーションを導入できるようにすることで EBNF を拡張し、パーサーの EBNF 文法を強化する優れた方法です。

于 2009-10-15T02:55:45.400 に答える