1

ソース文字列をカスタム (e)bnf で解析し、AST を json として取得する方法はありますか? 何が必要なのか説明しましょう:

  • ソース文字列と bnf 文法があります (文字列としても)。
  • レクサーとしてEBNFを入れました。
  • ソースを追加します。
  • AST を取得し、JSON として保存します。
4

1 に答える 1

1

「レクサーとしてのEBNF」は無意味です。しかし、あなたの質問の残りの部分は、「JSON 形式で AST を生成するために EBNF によって駆動されるパーサーを取得できますか?」と解釈できます。

もちろん。

ほとんどのパーサー ジェネレーターは、(E)BNF と "parse" を受け入れます。それらのほとんどは、AST を自動的に生成しません。プログラマーは、各ルールがツリー ノードを生成する方法を定義する必要があります。それらはあなたの仕事ではうまくいきません。

BNF とソース ファイル ANTLR4 (と思う) と DMS Software Reengineering Toolkit だけを使用して、データ構造として AST を自動的に生成するものもあります。どちらも JSON を直接生成しませんが、どちらの場合も、JSON を出力する一般的なツリー ウォーカーを (1 回) 書くのは簡単です。

DMS の BNF は、BNF 規則のみを使用して、文脈自由文法を処理します。ANTLR4 はほとんどの文法を処理しますが、記述できる内容に制限があり (たとえば、特定の種類の左再帰は禁止されています)、文法が LL(1) でない場合に曖昧さをなくすための情報を追加する必要があります。

DMS は XML を直接エクスポートします。この例を参照してください。

于 2013-11-15T10:26:15.243 に答える