【问题标题】:Is it possible to write JSON parser without using recursion?是否可以在不使用递归的情况下编写 JSON 解析器?
【发布时间】:2011-03-18 12:30:15
【问题描述】:

是否可以在不使用递归的情况下编写 JSON 解析器?如果是,你会建议什么方法?

【问题讨论】:

    标签: json recursion parsing


    【解决方案1】:

    可以通过等效的迭代实现来重现任何递归代码。

    这个问题很好地描述了这一点:Is it possible to remove recursion from this function?

    【讨论】:

    • 错了。你所需要的只是一个堆栈。进入递归调用就是在栈上添加数据,离开就是移除它。
    • 确实如此,但与递归对应的代码相比,您的代码通常不那么优雅且更难理解。
    • 你基本上是对的。那是我学习的编程课程中的一章:从递归转换为迭代。
    【解决方案2】:

    我同意James - 理论上任何递归代码都可以使用迭代方法来实现。参考链接上描述的堆栈方法是一个有效的选项。另一种方法是您可以硬编码到n 深度,但明显的风险是受限于所述深度。

    如果不了解您尝试运行 JSON 处理代码的环境和约束的更多信息,很难说哪种方法最适合。需要考虑的一些事项:

    • 如果您可以管理递归代码通常更易于遵循(并且与几乎任何语言的 99% 示例兼容,用于处理 JSON)
    • 使用固定深度的迭代代码可以“更高效”,因为它不需要尽可能多地使用堆栈,但不能很好地扩展到n-depth 场景
    • 基于堆栈的代码可以处理n-depth 场景,但对其他程序员来说可能不那么直观

    此外,可以线性化树结构(JSON 的对象图是隐式的,假设仅数组可以具有“数组”的虚拟根)。这允许平流处理方法。如果你更进一步并注入DOWNUP 之类的人工令牌,它可以非常清晰易读。这是编译器设计和语言分析中出现的东西,但在这里作为一个概念可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 1970-01-01
      • 2022-01-16
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 2014-07-14
      • 2012-06-27
      相关资源
      最近更新 更多