我现在正在探索使用Parsekit并创建语法,但学习曲线非常陡峭.我认为我不会在接下来的几个星期里把它搞清楚,然后意识到这不是正确的方法.
人们在解析这些事情时想要分享的任何见解/资源?
谢谢,奥利维尔
(我的回答要记住一件事:虽然我是ParseKit的开发者,但我并没有真正设计框架或它的API.它主要基于Steven Metsker的书Building Parsers With Java中的特定设计.我只是将它们移植到ObjC /可可.)
ParseKit由三部分组成:
>高度灵活的高性能Objective-C Tokenizer(PKTokenizer,PKToken类)
>一个完全动态的Objective-C Parser工具包,用于构建具有无限前瞻(PKParser类和子阶段)的回溯,递归优势解析器.由于其动态性,此解析器工具包的性能对于大输入而言较差.
> Objective-C通过语法生成解析器 – 使用BNF样式语法语法(类似于yacc或ANTLR)为您的自定义语言生成Objective-C解析器.解析时,解析器将为您的Objective-C代码提供回调.由于#2的动态性,编写语法相对容易,并且对语法中可以做的事情的限制相对较少.
上面的每个组件都基于先前的组件.所以#3 – 语法工具包 – 使用#1令牌化器和#2解析器工具包.
如果你正在做任何严肃的解析任务,我总是建议检查#1 – tokenizer – PKTokenizer.它非常灵活,功能强大,性能非常好.如果你更容易处理令牌而不是输入字符串(通常是),你可能想要检查一下.
至于#2(ObjC Parser工具包),你通常只想跳过它并转到#3,因为通过语法构建解析器要比通过ObjC代码构建解析器好得多.
对于#3(通过BNF Grammars的ObjC Parser工具包),最重要的考虑因素是性能. ParseKit的解析器工具包适用于解析相对较小的输入字符串.一些例子可能是:
> XPath样式的查询语言
> sql
>相对简明的DSL或命令语言
>正则表达式
>菜单(或者可以分解为相对较小句子的平面数组的东西)
由于性能问题,ParseKit的解析器工具包通常不适合解析较大的输入字符串.一些例子可能是:
> XML文档
> JsON文档
ParseKit当然可以(并且确实)解析这些类型的输入,但是由于ParseKit的动态性(回溯,infinte lookeahead),与专用的XML或JsON解析器相比,性能很差.
对于“葡萄酒菜单”,我会说,是的 – ParseKit可能是一个很好的(可能是很好的)解决方案.特别是如果你可以将输入的各行分成一个字符串数组并逐个解析它们.性能应该非常好,一旦你克服了学习曲线,ParseKit对于这些类型的工作来说非常强大/方便.
事实上,IIEts,Metsker的原着书甚至使用这样的东西作为好用的工具包的一个例子.
希望这可以帮助.
总结以上是内存溢出为你收集整理的objective-c – Parsekit或我自己解析?全部内容,希望文章能够帮你解决objective-c – Parsekit或我自己解析?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)