【问题标题】:Packrat parsing HTTPPackrat 解析 HTTP
【发布时间】:2011-02-24 15:32:18
【问题描述】:

有人可以告诉我如何使用 scala 2.8 packrat-parsing 解析 HTTP 协议吗?

我需要将附加的示例 HTTP 响应解析为

  • ResponseStatusCode:Int
  • 标题:列表[(字符串,字符串)]
  • 正文:字符串、数组[字节]、字符缓冲区 或者其他的

非常感谢 Packrat-Parser 的简短示例用法。谢谢!

HTTP/1.1·200·OK(CR)(LF)
Date:·Thu,·27·May·2010·12:18:48·GMT(CR)(LF)
Server:·Apache(CR)(LF)
Vary:·Accept-Encoding,User-Agent(CR)(LF)
Connection:·close(CR)(LF)
Transfer-Encoding:·chunked(CR)(LF)
Content-Type:·text/html;·charset=utf-8(CR)(LF)
(CR)(LF)
... Hello World ..

【问题讨论】:

  • 我认为为此使用组合解析器是在使用大锤杀死跳蚤。好吧,也许是一把大锤来杀死一只蟑螂。还要注意,packrat 部分是关于使解析器在回溯时更高效。顺便说一句,我不认为 HTTP 响应的解码需要任何回溯,因此 Packrat 方面没有实际意义。
  • 好的,但是什么是解析任意符合标准的 http-responses 的优雅而有效的解决方案?
  • 您对编写 HTTP 响应解码器的体验感兴趣吗?或者你只是想消费它们?如果是后者,我只会使用现成的库之一。 Apache HttpComponents (hc.apache.org) 将是显而易见的建议。
  • 我需要一个自定义且高效的 HTTP 解析器来处理 CPS 上下文中的 NIO 数据块。我的工作草案位于:github.com/hotzen/Thesis/tree/master/src/dataflow/io/http 很抱歉迟到了评论。感谢有关如何正确设计此类解析器的任何建议。

标签: http parsing scala scala-2.8 parser-combinators


【解决方案1】:

【讨论】:

  • 我认为“老式”解析器和新的 Packrat 解析器之间存在较大差异。
  • @hotzen:Scala 2.8 组合器解析器库添加了 PEG 解析,并且可以记住解析结果,以便在发生回溯时重新使用。我认为其中任何一个都与解析 HTTP 响应无关。也许我错了。
  • 你是完全正确的,但由于这是当前要完成的解析工作,我想我可以看看 packrats...
  • @hotzen:我仍然不认为这是一个解析问题。这只是解码键/值对的无序集合的问题。可以通过解析技术和工具来完成,但我仍然认为这太过分了。而且由于这不是您为了编写解析器而做的事情,因此您应该使用现有的库 (hc.apache.org)。
猜你喜欢
  • 1970-01-01
  • 2010-11-27
  • 2020-06-06
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多