gpt4 book ai didi

objective-c - Parsekit 还是自己解析?

转载 作者:太空狗 更新时间:2023-10-30 04:01:15 25 4
gpt4 key购买 nike

我正在编写一个需要解析 Wine 菜单的应用程序。据我目前所见,它们都遵循某种结构,关键在于定义所有这些结构。 我现在正在探索使用 Parsekit 和创建语法,但学习曲线非常陡峭。与其花接下来的几周时间弄明白然后意识到这不是正确的方法,我想我会问。

在解析此类内容时,大家有什么见解/资源可以分享吗?谢谢,奥利维尔

最佳答案

ParseKit 的开发者|在这里。

(我的回答要记住一件事:虽然我是 ParseKit 的开发人员,但我并没有真正设计框架或其 API。它主要基于 Steven Metsker 的书 Building Parsers With Java 中的特定设计。我只是将它们移植到 ObjC/Cocoa。)


ParseKit 由三部分组成:

  1. 高度灵活、高性能的Objective-C Tokenizer(PKTokenizerPKToken 类)
  2. 一个完全动态的 Objective-C 解析器工具包,用于构建具有无限前瞻性的回溯、递归体面的解析器(PKParser 类和子类)。由于其动态性,此解析器工具包的性能对于大输入来说很差。
  3. 通过语法 生成 Objective-C 解析器 - 使用 BNF 样式语法语法(类似于 yacc 或 ANTLR)为您的自定义语言生成 Objective-C 解析器。解析时,解析器会为您的 Objective-C 代码提供回调。由于 #2 的动态性,编写语法相对容易,并且对您在语法中可以做什么的限制相对较少。

上面的每个组件都建立在之前的组件之上。所以 #3 - 语法工具包 - 同时使用 #1 分词器和 #2 解析器工具包。

如果您正在执行任何严肃的解析任务,我会总是建议您查看#1 - 分词器 - PKTokenizer。它非常灵活和强大,性能非常好。如果使用标记而不是输入字符串(通常是这样)对您来说更容易,那么您可能想要检查一下。

至于#2(ObjC 解析器工具包),您通常会想跳过它并转到#3,因为通过语法构建解析器比通过 ObjC 代码构建解析器要好得多。

对于#3(通过 BNF 语法的 ObjC 解析器工具包),最重要的考虑因素是性能。 ParseKit 的解析器工具包适用于解析比较小的输入字符串。一些例子可能是:

  1. XPath 风格的查询语言
  2. SQL
  3. 相对精通 DSL 或命令语言
  4. 正则表达式
  5. 菜单(或可以分解成一系列相对较小的句子的东西)

出于性能考虑,ParseKit 的解析器工具包通常适合解析较大的输入字符串。一些例子可能是:

  1. XML 文档
  2. JSON 文件

ParseKit 当然可以(并且确实)解析这些类型的输入,但同样,由于 ParseKit 的动态性(回溯、无限前瞻),与专用的 XML 或 JSON 解析器相比,性能较差。


对于“ Wine 菜单”,我会说,是的 - ParseKit 可能是一个很好(可能很棒)的解决方案。特别是如果您可以将输入的各个行分解为一个字符串数组并一个一个地解析它们。性能应该相当不错,一旦您克服了学习曲线,ParseKit 对于这些类型的工作来说非常强大/方便。

事实上,Metsker 的原著 IIRC 甚至使用类似这样的内容作为很好地使用他的工具包的示例。

希望这对您有所帮助。

关于objective-c - Parsekit 还是自己解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10212545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com