我正在编写一个需要解析葡萄酒菜单的应用程序。据我目前所见,它们都遵循某种结构,诀窍就是定义所有这些结构。我现在正在探索使用Parsekit和创建语法,但学习曲线相当陡峭。而不是花几个星期弄清楚,然后意识到这不是正确的方法,我想我会问。
在解析这些东西方面,人们有什么见解/资源想要分享吗?谢谢,奥利维尔
发布于 2012-04-19 00:58:43
这里是ParseKit的开发者。
(在我的回答中要记住一件事:尽管我是ParseKit的开发者,但我并没有真正设计这个框架或它的应用程序接口。它主要基于Steven Metsker的书Building Parsers With Java中的特定设计。我只是把它们移植到了ObjC/Cocoa。)
ParseKit由三部分组成:
PKTokenizer,PKToken类)PKParser类和子类)。由于它的动态性,这个解析器工具包的性能对于通过语法生成大型input.上面的每个组件都建立在先前组件的基础上。因此#3 -语法工具包-同时使用#1记号赋予器和#2解析器工具包。
如果你正在做任何严肃的解析任务,我总是建议你去看看#1 - tokenizer - PKTokenizer。它令人难以置信的灵活和强大,性能非常好。如果处理令牌比处理输入字符串更容易(通常是这样),那么您可能会想要检查一下。
至于#2 (ObjC解析器工具包),您通常会想跳过它,转到#3,因为通过语法构建解析器比通过ObjC代码构建它们要好得多。
对于#3 (通过ObjC语法的BNF工具包),最重要的考虑因素是性能。ParseKit的解析器工具包适用于解析相对较小的输入字符串。以下可能是一些示例:
命令XPath风格查询languages
组成。
由于性能方面的考虑,ParseKit的解析器工具包通常是而不是,适合解析较大的输入字符串。以下可能是一些示例:
ParseKit当然可以(并且确实)解析这些类型的输入,但是由于ParseKit的动态性(回溯,无限展望),与专用的XML或JSON解析器相比,性能仍然很差。
对于的“葡萄酒菜单”,我会说,是的-- ParseKit可能是一个很好(可能很棒)的解决方案。特别是如果您可以将输入的各个行拆分为一个字符串数组,并逐个解析它们。性能应该是相当好的,一旦你通过了学习曲线,ParseKit对于这些类型的工作是令人难以置信的强大/方便。
事实上,Metsker的原著IIRC甚至使用了这样的东西作为一个很好地使用他的工具包的例子。
希望这能有所帮助。
https://stackoverflow.com/questions/10212545
复制相似问题