Pegjs: [壮举。 Req.] 反转解析过程

创建于 2018-05-17  ·  13评论  ·  资料来源: pegjs/pegjs

问题类型

  • 错误报告:
  • 功能要求:
  • 问题:
  • 不是问题:

先决条件

  • 你能重现这个问题吗?:是的
  • 您是否搜索了存储库问题?:
  • 你检查过论坛吗?:什么论坛?
  • 您是否进行了网络搜索(谷歌、雅虎等)?:是的

描述

逆转解析的进度会很棒。

预期行为:

将对象恢复为已解析的格式。

实际行为:

我只能解析格式,不能将对象转回解析后的格式。

discussion feature task

最有用的评论

你好。 我不明白您请求的目标和背景(为什么)。 一个具体的样本可能会有所帮助。

解析将字符串识别为语言的一部分,并可选择构造 AST 或评估(解释)以下形式的表达式: parse(text) --> result
这个 _parse()_ 函数通常不能保证是一个双射函数。 因此,无法保证您可以反转解析,例如,您可以在解析过程中丢弃详细信息。

给定一个 AST,您可以将表达式生成为对应于一种语言的文本。 这是作为代码生成的一部分完成的,您可以使用模板引擎将 AST 转换为源代码。 但是这个任务超出了解析库的范围。

所有13条评论

你好。 我不明白您请求的目标和背景(为什么)。 一个具体的样本可能会有所帮助。

解析将字符串识别为语言的一部分,并可选择构造 AST 或评估(解释)以下形式的表达式: parse(text) --> result
这个 _parse()_ 函数通常不能保证是一个双射函数。 因此,无法保证您可以反转解析,例如,您可以在解析过程中丢弃详细信息。

给定一个 AST,您可以将表达式生成为对应于一种语言的文本。 这是作为代码生成的一部分完成的,您可以使用模板引擎将 AST 转换为源代码。 但是这个任务超出了解析库的范围。

虽然我个人理解希望软件能够生成它可以解析的东西的感觉,正如@pjmolina总结的那样,这超出了这个库(解析器生成器)的范围,所以我将关闭它。

我建议你只制作你自己的代码生成器,对你正在解析的语言使用现有的代码生成器(你必须确保 AST 是正确的)。

这张票很有意义。 考虑到 PEG.js 语法中的语法,您希望还有哪个库将 AST 转换为源代码? 是的,目前没有办法做到这一点。 大多数 AST 是在操作中生成的,并且无法还原它们。 但是当我们在另一个问题中讨论了 AST 生成的语法时,它突然不仅有意义,而且可以实现。

例如, StringTemplate是您可以用于此类任务的众多工具之一:来自 AST 的代码生成。

我不认为 StringTemplate 读取 PEG.js 语法中的语法。

语境:

要恢复到原来的文本的AST(A bstract小号yntaxŤREE)是不够的。 例如给出一个 JavaScript 语法这两个语句
即使它们的语法略有不同,通常也会有相同的AST,

// statement 1
var x = 5

// statement 2 - with semicolon
var x = 5;

为了能够恢复到原始文本,解析器的操作必须是一个Injective 函数

建议:

我个人不明白这样的功能如何成为解析库的一部分
依赖于嵌入式用户操作来创建输出结构。

也许在未来,如果 pegjs 会有某种自动解析树创建
这是可行的。

建立你自己的

假设在 pegjs 嵌入的动作中,完整的位置信息是可用的
您可以插入自己的自定义嵌入操作来构建 CST / ParseTree
并且仅在解析后阶段将其转换为 AST。
一旦你有一个 CST 重新创建原始输入是相当微不足道的......

使用自动 CST/解析树创建评估解析库

你可以在这里找到几个候选人:
https://tomassetti.me/parsing-in-javascript/

我决定再看看这个,但它必须在 v1 之后才能实现,因为这将是 API 稳定的地方,我可以发布一个提供基本通用 AST 结构的包(例如@pegjs/ast ?)。 解析器开发人员可以使用这个包来从中派生他们自己的 AST,如果需要,可以使用另一个工具将其转换回源代码(我在想@pegjs/reverse

@futagoza这个怎么样?

@Coffee2CodeNL pegjs v1 尚未发布。

以 PEGJS 中的这个 SVG 变换解析器为例: https :
能够逆转这个过程并将 AST 转换回字符串会很棒,
所以 SVG 转换可以很容易地修改,而不仅仅是解析。
一种类似的工具是Augeas

有人可以推荐一些工具来从 AST 生成代码吗?

@lzane哪个 AST?

@polkovnikov-ph 一些由 PEG 生成的定制 AST

是否有任何读取 PEG 语法的工具可以完成代码生成工作?

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

gatsbyz picture gatsbyz  ·  3评论

StoneCypher picture StoneCypher  ·  8评论

dmajda picture dmajda  ·  20评论

dmajda picture dmajda  ·  15评论

futagoza picture futagoza  ·  6评论