2

私は Javascript 用のパーサー ジェネレーターを調べていて、いくつか (つまり、PEG.js) を見つけました。

ただし、これらが Google Closure Compiler のようなものとどの程度うまく機能するかは明らかではありません。

たとえば、PEG.js のように見えますが、ルールの一部として実行するコードを与えることができますが、関数 (コンパイラによって名前が変更される可能性がある) をルールにバインドするにはどうすればよいでしょうか?

さらに、どのパーサーがシンボル テーブルの受け渡しをサポートしているかは不明です。たとえば、「A or B」のような式を受け入れる文法を定義したいとします。「A」と「B」の値は実行時に定義されます。たとえば、ユーザーが表示しているレコードの属性として定義されます。

もちろん、PEG.js は必須ではありません。検索結果に表示され、使用可能に見える唯一のパーサー ジェネレーターです。

4

2 に答える 2

1

ここにリストされている出力言語として Javascript を使用するパーサーがいくつかあります。実際にJavascriptでビルドされていて、ブラウザでプリコンパイルしなくても使えるパーサーとしては、 PEG.jsの他にJS/CCがあるようです。

サーバー上のパーサージェネレーターに文法を送信するなど、他の方法もあります。そのためには、 Nodejs を使用するJison (サイトにはそのデモが含まれています) があり、おそらく上記のリストにある他の言語で書かれた他のパーサーもサーバー上で実行できます。これらの生成されたファイルがクロージャ コンパイラと互換性がある場合は、生成されたパーサーの場所をサイトに送信する前に、サーバー上でコンパイルできます。おそらく、パーサーは既に最適化されており、コンパイラーに対して行うことはあまりないので、最初に確認する必要があります。

サーバー ソリューションは、実行時にシンボルが実際に定義されるのではなく、実行時に文法が定義され、その文法に対してパーサーを生成できることを意味します。それはかなりの違いですが、必要なものだけかもしれません。識別子が存在するか、正しい (静的) 型を持っているかを確認するために使用されるシンボル テーブルのみが必要な場合は、結果の解析ツリーを分析し、その時点でエラーをスローするだけで十分です。

于 2011-08-25T14:40:13.653 に答える