Pegjs: プリプロセッサ? ソースコードを再生成する

作成日 2017年11月12日  ·  5コメント  ·  ソース: pegjs/pegjs

プリプロセッサとして既存の言語の拡張機能を構築しています。 pegjsにソースコードを再生成させる方法があるかどうかを理解できませんでした。 基本的にはソースを解析したいのですが、ASTを変更してからソースを再生成したいと思います。 とにかくこれは可能ですか?

discussion question

最も参考になるコメント

@YemSalatは正しいです、PEG.jsは単なるパーサジェネレータです。

  1. PEG.jsを使用してパーサーを構築します(アクションがASTを返すことを確認してください)
  2. 生成されたパーサーを使用して言語を解析し、ASTを構築します
  3. 変換パスを使用してASTを変更します
  4. ソースコードを再生成する

ご覧のとおり、PEG.jsは最初のステップにのみ関与するため、ソースを再生成する場合は、自分でコンパイラを構築する必要があります。または、言語用のコンパイラまたはジェネレータ(ツールチェーン)がすでに存在する場合は、ツールチェーンと互換性のあるASTを返すか、ツールチェーンとの互換性を高めるためにASTを変更する変換を追加します。

最後に、これは実際にはPEG.jsの問題ではありませんが、議論を続けることを歓迎します。

全てのコメント5件

@mattkanwisher申し訳ありませんが、ソースを「再生成」することの意味がよくわかりません。
少し明確にしていただけませんか? ASTに基づいてコードを作成する場合は、そのロジックを自分で文法に直接記述するか、別の部分として記述する必要があります。

ええ、ASTに基づいてコードを生成するので、これを使用して前処理したい場合は、コンパイラを元のソースに戻す必要がありますか?

うーん、もしあなたが_元の_ソースが欲しいなら-あなたはそれを生成する必要がなくてもそれを持っているでしょう?
ただし、その修正バージョンが必要な場合は、コード生成ロジックを自分で作成する必要があります。
@Mingun @futagoza私が間違っている場合は訂正してください)

@YemSalatは正しいです、PEG.jsは単なるパーサジェネレータです。

  1. PEG.jsを使用してパーサーを構築します(アクションがASTを返すことを確認してください)
  2. 生成されたパーサーを使用して言語を解析し、ASTを構築します
  3. 変換パスを使用してASTを変更します
  4. ソースコードを再生成する

ご覧のとおり、PEG.jsは最初のステップにのみ関与するため、ソースを再生成する場合は、自分でコンパイラを構築する必要があります。または、言語用のコンパイラまたはジェネレータ(ツールチェーン)がすでに存在する場合は、ツールチェーンと互換性のあるASTを返すか、ツールチェーンとの互換性を高めるためにASTを変更する変換を追加します。

最後に、これは実際にはPEG.jsの問題ではありませんが、議論を続けることを歓迎します。

だから私はそれを理解しました。 将来このバグ投稿にたどり着く人のために。 「超小型コンパイラ」のソースコードを読んでください。 その後、pegjsを使用して数時間でプリプロセッサを構築することができました

https://github.com/thejameskyle/the-super-tiny-compiler

このページは役に立ちましたか?
0 / 5 - 0 評価