首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Parsekit还是我自己的parse?

Parsekit还是我自己的parse?
EN

Stack Overflow用户
提问于 2012-04-18 23:20:06
回答 1查看 958关注 0票数 4

我正在编写一个需要解析葡萄酒菜单的应用程序。据我目前所见,它们都遵循某种结构,诀窍就是定义所有这些结构。我现在正在探索使用Parsekit和创建语法,但学习曲线相当陡峭。而不是花几个星期弄清楚,然后意识到这不是正确的方法,我想我会问。

在解析这些东西方面,人们有什么见解/资源想要分享吗?谢谢,奥利维尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-19 00:58:43

这里是ParseKit的开发者。

(在我的回答中要记住一件事:尽管我是ParseKit的开发者,但我并没有真正设计这个框架或它的应用程序接口。它主要基于Steven Metsker的书Building Parsers With Java中的特定设计。我只是把它们移植到了ObjC/Cocoa。)

ParseKit由三部分组成:

  1. 一个高度灵活、高性能的Objective-C标记器 (PKTokenizerPKToken类)
  2. 一个完全动态的Objective-C解析器工具包,用于构建具有无限前瞻功能的回溯、递归风格的解析器( PKParser类和子类)。由于它的动态性,这个解析器工具包的性能对于通过语法生成大型input.
  3. Objective-C解析器来说是很差的-使用BNF风格的语法为您的自定义语言生成一个Objective-C解析器(类似于或ANTLR)。在解析时,解析器将提供对Objective-C代码的回调。由于#2的动态性,编写语法相对容易,在语法中可以做什么的限制也相对较少。

上面的每个组件都建立在先前组件的基础上。因此#3 -语法工具包-同时使用#1记号赋予器和#2解析器工具包。

如果你正在做任何严肃的解析任务,我总是建议你去看看#1 - tokenizer - PKTokenizer。它令人难以置信的灵活和强大,性能非常好。如果处理令牌比处理输入字符串更容易(通常是这样),那么您可能会想要检查一下。

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

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

命令XPath风格查询languages

  • SQL

  • Relatively由DSL或languages

  • Regular Expressions

  • Menus (或者可以分解为相对较小的句子组成的扁平数组)

组成。

由于性能方面的考虑,ParseKit的解析器工具包通常是而不是,适合解析较大的输入字符串。以下可能是一些示例:

  1. XML documents
  2. JSON documents

ParseKit当然可以(并且确实)解析这些类型的输入,但是由于ParseKit的动态性(回溯,无限展望),与专用的XML或JSON解析器相比,性能仍然很差。

对于的“葡萄酒菜单”,我会说,是的-- ParseKit可能是一个很好(可能很棒)的解决方案。特别是如果您可以将输入的各个行拆分为一个字符串数组,并逐个解析它们。性能应该是相当好的,一旦你通过了学习曲线,ParseKit对于这些类型的工作是令人难以置信的强大/方便。

事实上,Metsker的原著IIRC甚至使用了这样的东西作为一个很好地使用他的工具包的例子。

希望这能有所帮助。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10212545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档