1

有没有办法用自定义(e)bnf 解析源字符串并将 AST 获取为 json?让我解释一下我需要什么:

  • 我有源字符串和 bnf 语法(也是字符串)。
  • 我把EBNF作为词法分析器。
  • 添加来源。
  • 获取 AST 并将其保存为 JSON。
4

1 回答 1

1

“EBNF 作为词法分析器”是荒谬的。但是你的问题的其余部分可以解释为,“我可以得到一个由 EBNF 驱动的解析器来生成 JSON 格式的 AST 吗?”

当然。

大多数解析器生成器接受 (E)BNF 和“解析”。它们中的大多数不会自动生成 AST。它们让程序员定义每个规则应该如何生成树节点。这些对你的任务不起作用。

有些确实只使用 BNF 和源文件自动生成 AST 作为数据结构:ANTLR4(我认为)和我们的 DMS Software Reengineering Toolkit。这些都不会直接生成 JSON,但在这两种情况下,都应该直接编写(一次)一个吐出 JSON 的通用 tree-walker。

DMS 的 BNF 将使用BNF 规则处理任何上下文无关语法。ANTLR4 处理大多数语法,但对您可以编写的内容有限制(例如,某些类型的左递归是禁止的),并且要求您在语法不是 LL(1) 的情况下添加额外的消歧信息。

DMS 将直接导出 XML。请参阅此示例

于 2013-11-15T10:26:15.243 回答