【问题标题】:How convert the context free grammar of json to state machine?如何将json的上下文无关语法转换为状态机?
【发布时间】:2016-09-11 10:44:22
【问题描述】:

我阅读了 JSON(http://www.json.org/) 和解析器的上下文无关语法:如何解析 JSON 文本以生成对象或数组(https://github.com/douglascrockford/JSON-js/blob/master/json_parse_state.js)。

但我不知道如何将 JSON cfg 转换为状态机。

谁能详细介绍一下?

【问题讨论】:

  • 你能告诉我们你在编译时想要实现的计划是什么吗?也许有人有替代方案。
  • 你需要什么“状态机”?请注意,DFA 无法描述 JSON。
  • 但是lib 确实使用了状态机。它是怎么做到的?使用自下而上的解析器?我坐不到状态机。

标签: javascript json compiler-construction


【解决方案1】:

您无法构建“解析”json 的状态机,因为状态机在技术上无法匹配嵌套括号。

您可以构建一个下推自动机 (PDA),使用堆栈来跟踪括号。如果您手动执行此操作,您将构建类似 LR(0) 解析器的东西。 如果你打算这样做,使用 LALR 解析器生成器会更容易,它 将学习语法并为您构建 PDA。

您还可以通过在识别器中“编译”语法规则来编写自己的递归下降解析器。对于 JSON,这是一件非常合理的事情;语言没那么复杂。在 how to build a recursive descent parser 上查看我的 SO 答案。

【讨论】:

  • 但是 lib(github.com/douglascrockford/JSON-js/blob/master/…) 确实使用了状态机。你读过源代码吗?它是自下而上的解析器吗?
  • 您可以使用 FSA 和堆栈来实现 PDA。我没有看代码。我敢打赌,有一个堆栈可以跟踪嵌套结构。
猜你喜欢
  • 2012-06-19
  • 2014-05-24
  • 1970-01-01
  • 2011-07-23
  • 2019-02-03
  • 2021-06-19
  • 1970-01-01
  • 2012-01-04
  • 2014-05-09
相关资源
最近更新 更多