我正在构建对现有语言的扩展作为预处理器。 我无法弄清楚是否有办法让 pegjs 重新生成源代码。 基本上我希望它解析源,我想修改 AST 然后重新生成源。 无论如何,这是可能的吗?
@mattkanwisher抱歉,我不太明白您所说的“重新生成”源是什么意思。
你能澄清一下吗? 如果您的意思是基于 AST 生成代码 - 您必须自己编写该逻辑,直接在语法中或作为单独的部分。
是的,基于 AST 生成代码,所以如果我想使用它进行预处理,我必须生成一个编译器回到原始源代码?
嗯,如果你想要 _original_ 源 - 你仍然需要它来生成它,对吧?
但是如果你想要它的修改版本 - 你必须自己编写代码生成逻辑。
( @Mingun @futagoza如果我错了,请纠正我)
@YemSalat是对的,PEG.js 只是一个解析器生成器。
如您所见,PEG.js 只涉及第一步,所以如果您想重新生成源代码,您必须自己构建一个编译器,或者如果该语言已经存在编译器或生成器(工具链),我建议您要么返回与工具链兼容的 AST,要么添加一个转换来改变 AST 以使其与工具链更兼容。
结束,因为这实际上不是 PEG.js 的问题,但欢迎您继续讨论。
所以我想通了。 对于将来登陆此错误帖子的任何人。 只需阅读“超级微型编译器”的源代码即可。 之后,我能够在几个小时内使用 pegjs 构建我的预处理器
最有用的评论
@YemSalat是对的,PEG.js 只是一个解析器生成器。
如您所见,PEG.js 只涉及第一步,所以如果您想重新生成源代码,您必须自己构建一个编译器,或者如果该语言已经存在编译器或生成器(工具链),我建议您要么返回与工具链兼容的 AST,要么添加一个转换来改变 AST 以使其与工具链更兼容。
结束,因为这实际上不是 PEG.js 的问题,但欢迎您继续讨论。