Pegjs: Pré-processador? Gerar novamente o código-fonte

Criado em 12 nov. 2017  ·  5Comentários  ·  Fonte: pegjs/pegjs

Estou construindo extensões para uma linguagem existente como um pré-processador. Não consegui descobrir se há uma maneira de fazer com que os pegjs regenerem o código-fonte. Basicamente, quero analisar a fonte, quero modificar o AST e, em seguida, regenerar a fonte. De qualquer forma, isso é possível?

discussion question

Comentários muito úteis

@YemSalat está certo, o PEG.js é apenas um gerador de analisador.

  1. Construir um analisador usando PEG.js (garantir que as ações retornem AST)
  2. Analise sua linguagem com o analisador gerado para construir um AST
  3. Modifique o AST usando passes de transformação
  4. Regenere o código-fonte

Como você pode ver, o PEG.js está envolvido apenas na primeira etapa, então se você deseja regenerar o código-fonte, você mesmo deve construir um compilador, ou se um compilador ou gerador (conjunto de ferramentas) já existir para a linguagem, sugiro você retorna um AST compatível com o conjunto de ferramentas ou adiciona uma transformação que altera o AST para ser mais compatível com o conjunto de ferramentas.

Encerrando, já que este não é realmente um problema com o PEG.js, mas seja bem-vindo para continuar a discussão.

Todos 5 comentários

@mattkanwisher desculpe, não entendo muito bem o que você quer dizer com "regenerar" a fonte.
Você poderia esclarecer um pouco? Se você pretende produzir código baseado na AST - você terá que escrever essa lógica você mesmo, diretamente na gramática ou como uma parte separada.

Sim, produzir código baseado no AST, então eu tenho que gerar um compilador de volta para a fonte original se eu quiser pré-processar usando isso?

Hmm, se você quiser a fonte _original_ - você ainda a teria sem precisar gerá-la, certo?
Mas se você quiser uma versão modificada dele - você terá que escrever a lógica de geração de código você mesmo.
( @Mingun @futagoza corrija-me se eu estiver errado)

@YemSalat está certo, o PEG.js é apenas um gerador de analisador.

  1. Construir um analisador usando PEG.js (garantir que as ações retornem AST)
  2. Analise sua linguagem com o analisador gerado para construir um AST
  3. Modifique o AST usando passes de transformação
  4. Regenere o código-fonte

Como você pode ver, o PEG.js está envolvido apenas na primeira etapa, então se você deseja regenerar o código-fonte, você mesmo deve construir um compilador, ou se um compilador ou gerador (conjunto de ferramentas) já existir para a linguagem, sugiro você retorna um AST compatível com o conjunto de ferramentas ou adiciona uma transformação que altera o AST para ser mais compatível com o conjunto de ferramentas.

Encerrando, já que este não é realmente um problema com o PEG.js, mas seja bem-vindo para continuar a discussão.

Então eu descobri. Para qualquer um que encontrar esta postagem de bug no futuro. Basta ler o código-fonte para "O compilador super minúsculo". Depois disso, consegui usar pegjs para construir meu pré-processador em algumas horas

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

Esta página foi útil?
0 / 5 - 0 avaliações