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?
@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.
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
Comentários muito úteis
@YemSalat está certo, o PEG.js é apenas um gerador de analisador.
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.