Pegjs: Préprocesseur ? Régénérer le code source

Créé le 12 nov. 2017  ·  5Commentaires  ·  Source: pegjs/pegjs

Je construis des extensions à un langage existant en tant que préprocesseur. Je n'ai pas pu déterminer s'il existe un moyen d'obtenir pegjs pour régénérer le code source. Fondamentalement, je veux qu'il analyse la source, je veux modifier l'AST puis régénérer la source. De toute façon c'est possible ?

discussion question

Commentaire le plus utile

@YemSalat a raison, PEG.js n'est qu'un générateur d'analyseur.

  1. Construisez un analyseur à l'aide de PEG.js (assurez-vous que les actions renvoient AST)
  2. Analysez votre langage avec l'analyseur généré pour créer un AST
  3. Modifier l'AST à l'aide des passes de transformation
  4. Régénérer le code source

Comme vous pouvez le voir, PEG.js n'est impliqué que dans la première étape, donc si vous voulez régénérer la source, vous devez construire vous-même un compilateur, ou si un compilateur ou un générateur (chaîne d'outils) existe déjà pour le langage, je suggère soit vous renvoyez AST compatible avec la chaîne d'outils, soit vous ajoutez une transformation qui modifie l'AST pour être plus compatible avec la chaîne d'outils.

Clôture, car ce n'est pas réellement un problème avec PEG.js mais vous êtes les bienvenus pour continuer la discussion.

Tous les 5 commentaires

@mattkanwisher désolé, je ne comprends pas très bien ce que vous entendez par "régénérer" la source.
Pourriez-vous s'il vous plaît clarifier un peu? Si vous voulez dire produire du code basé sur l'AST, vous devrez écrire cette logique vous-même, soit directement dans la grammaire, soit en tant que pièce distincte.

Ouais, produire du code basé sur l'AST, je dois donc générer un compilateur à la source d'origine si je veux prétraiter en utilisant cela?

Hmm, si vous voulez la source _original_ - vous l'auriez toujours sans avoir besoin de la générer, n'est-ce pas ?
Mais si vous voulez une version modifiée de celui-ci, vous devrez écrire vous-même la logique de génération de code.
( @Mingun @futagoza s'il vous plaît corrigez-moi si je me trompe)

@YemSalat a raison, PEG.js n'est qu'un générateur d'analyseur.

  1. Construisez un analyseur à l'aide de PEG.js (assurez-vous que les actions renvoient AST)
  2. Analysez votre langage avec l'analyseur généré pour créer un AST
  3. Modifier l'AST à l'aide des passes de transformation
  4. Régénérer le code source

Comme vous pouvez le voir, PEG.js n'est impliqué que dans la première étape, donc si vous voulez régénérer la source, vous devez construire vous-même un compilateur, ou si un compilateur ou un générateur (chaîne d'outils) existe déjà pour le langage, je suggère soit vous renvoyez AST compatible avec la chaîne d'outils, soit vous ajoutez une transformation qui modifie l'AST pour être plus compatible avec la chaîne d'outils.

Clôture, car ce n'est pas réellement un problème avec PEG.js mais vous êtes les bienvenus pour continuer la discussion.

Alors j'ai compris. Pour tous ceux qui atterrissent sur ce message de bogue à l'avenir. Il suffit de lire le code source de "Le super petit compilateur". Après cela, j'ai pu utiliser pegjs pour construire mon préprocesseur en quelques heures

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

Cette page vous a été utile?
0 / 5 - 0 notes