構文解析の進行を逆にするのは素晴らしいことです。
予想される行動:
オブジェクトを解析された形式に戻します。
実際の動作:
私はフォーマットを解析することしかできず、オブジェクトを解析されたフォーマットに戻すことはできません。
やあ。 私はあなたの要求の目的と文脈(理由)を理解していません。 具体的なサンプルが役立つ可能性があります。
解析は文字列を言語の一部として認識し、オプションでASTを作成するか、次の形式で式を評価(解釈)します。 parse(text) --> result
この_parse()_関数は、一般に、全単射関数であることが保証されていません。 したがって、たとえば、解析中に詳細を破棄できるため、解析を元に戻すことができるという保証はありません。
ASTを指定すると、言語に対応するテキストに式を生成できます。 これはコード生成の一部として行われ、テンプレートエンジンを使用してASTをソースコードに変換できます。 ただし、このタスクは解析ライブラリの範囲外です。
個人的には、 @ pjmolinaが要約したように、ソフトウェアが解析可能なものを生成できるようにしたいという気持ちを理解していますが、これはこのライブラリ(パーサジェネレータ)の範囲外なので、これを閉じます。
解析している言語に既存のコードジェネレーターを使用して、独自のコードジェネレーターを作成することをお勧めします(ASTが正しいことを確認する必要があります)。
このチケットは非常に理にかなっています。 PEG.js構文の文法を前提として、ASTをソースコードに変換する他のライブラリはどれですか? はい、現在それを行う方法はありません。 ASTのほとんどはアクションで生成され、それらを元に戻すことは不可能です。 しかし、別の問題で説明したAST生成の構文がある場合、それは突然意味をなすだけでなく、実装することも可能になります。
たとえば、 StringTemplateは、このようなタスクに使用できる多くのツールの1つです
StringTemplateがPEG.js構文の文法を読み取るとは思いません。
元のテキストに戻すには、AST( A bstract S yntax T ree)では不十分です。 たとえば、JavaScript文法が与えられた場合、これら2つのステートメント
構文が少し異なっていても、通常は同じASTになります。
// statement 1
var x = 5
// statement 2 - with semicolon
var x = 5;
元のテキストに戻すことができるようにするには、パーサーのアクションが単射関数である必要があり
私は個人的に、そのような機能がどのように解析ライブラリの一部になり得るのかわかりません
これは、埋め込みユーザーのアクションに依存して出力構造を作成します。
将来的には、pegjsに何らかの自動解析ツリー作成が含まれる場合があり
これは実行可能です。
pegjsに埋め込まれたアクションの内部で、完全な位置情報が利用可能であると仮定します
独自のカスタム埋め込みアクションを挿入して、CST / ParseTreeを構築できます
解析後のフェーズでのみASTに変換します。
CSTを取得したら、元の入力を再作成するのは非常に簡単です...
ここでいくつかの候補を見つけることができます:
https://tomassetti.me/parsing-in-javascript/
これをもう一度検討することにしましたが、APIが安定し、基本的な共通AST構造を提供するパッケージをリリースできるため、実装する前にv1以降にする必要があります(例: @pegjs/ast
?)。 このパッケージは、パーサー開発者が独自のASTを派生させるために使用でき、必要に応じて、別のツールによってソースに変換するために使用できます( @pegjs/reverse
考えています)。
@futagozaこれはどうですか?
@ Coffee2CodeNL pegjsv1はまだリリースされていません。
例として、PEGJSのこのSVG変換パーサーを取り上げます: //github.com/nidu/svg-transform-parser
プロセスを逆にしてASTを文字列に戻すことができれば素晴らしいでしょう。
そのため、SVG変換は、解析するだけでなく、簡単に変更できます。
同様のツールの1つがAugeasです。
誰かがASTからコードを生成するためのいくつかのツールを推奨できますか?
@lzaneどのAST?
@ polkovnikov-phPEGによって生成されたカスタマイズされたAST
PEG文法を読み取るツールでコード生成ジョブを実行できるツールはありますか?
最も参考になるコメント
やあ。 私はあなたの要求の目的と文脈(理由)を理解していません。 具体的なサンプルが役立つ可能性があります。
解析は文字列を言語の一部として認識し、オプションでASTを作成するか、次の形式で式を評価(解釈)します。
parse(text) --> result
この_parse()_関数は、一般に、全単射関数であることが保証されていません。 したがって、たとえば、解析中に詳細を破棄できるため、解析を元に戻すことができるという保証はありません。
ASTを指定すると、言語に対応するテキストに式を生成できます。 これはコード生成の一部として行われ、テンプレートエンジンを使用してASTをソースコードに変換できます。 ただし、このタスクは解析ライブラリの範囲外です。