3

私は現在、単純な文脈自由文法を持つカスタム言語を利用するプロジェクトに取り組んでいます。

プロジェクトの特性により、複数のプラットフォーム、特にモバイルプラットフォームで同じ言語を使用する必要があります。現在、私は小さな手書きのJavaパーサー (Android プラットフォーム用) を使用しています。すぐに、基本的に同じパーサーをJavaScript用に作成する必要があり、後でC# (Windows Phone) とObjective C (iOS) 用にも作成する必要があります。PHP用に記述しなければならない可能性もあります。


私の質問は、パーサー開発プロセスを簡素化するためのオプションは何ですか? プラットフォームごとに基本的に同じパーサーを作成する必要がありますか、それとも作業の負担が少ない方法がありますか?


開発プロセスの観点からすると、最適な代替手段は、自動的にパーサーにコンパイルされる文法定義を作成できるようにすることです。

ただし、基本的に、これまでに見つけた唯一のクロスプラットフォーム パーサー ジェネレーターは、2 つのターゲット プラットフォーム (Java と C#) をサポートするGOLD パーサーです。他の代替案を教えていただけると本当に助かります。

他のクロスプラットフォーム コンパイラー コンパイラーについて知らない場合: 将来の言語拡張性に向けてコードを構成する方法のヒントはありますか?

4

3 に答える 3

3

https://en.wikipedia.org/wiki/Comparison_of_parser_generatorsに注目してください。ドメインを Java と C/C++ に制限すると、APG、GOLD、SableCC、SLK (とりわけ) がクロス言語であることが示唆されます。あなたが述べた目標には十分です。(また、アクション コードはインラインではなく文法から分離する必要があります。後者は目的を無効にするためです。) JavaScript も必要な場合は、APG (GPL ライセンス) とWaxEye ( MIT ライセンス)。

あなたの言語が合理的に単純であれば、あなたのビルド環境に統合するのが最も簡単で、あなたの考え方と合理的に一致すると思われるものを使用することをお勧めします. 解析時間がアプリケーションの総ワークロードの大部分でない限り、解析速度は問題になりませんが、モバイル コンテキストではテーブル サイズとメモリ使用量が問題になる場合があります。あなたの文法が「十分に単純」であれば (つまり、たとえば Perl ではない場合)、それらのツールのいずれかが機能することを期待します。

于 2013-07-22T02:47:02.373 に答える
1

REx パーサー ジェネレーターは、Objective C と PHP を除いて、必要なターゲットをサポートします (これらのコード ジェネレーターは可能かもしれません)。ただし、まだオープンソースとして公開されておらず、適切なドキュメントはなく、文法のサンプルのみです。しかし、 xqlintなど、それをうまく使用しているプロジェクトがあります。これは、そのプロジェクトの経験を説明する論文です。

于 2013-07-22T10:59:13.210 に答える