【发布时间】:2013-06-15 10:47:25
【问题描述】:
我正在学习 Go,我认为使用 Ragel 和 Go 实现我自己的 HTTP 1.1 解析器将是一个很好的练习。我认为查看 Mongrel2 的代码库以了解它是如何完成的会是个好主意。
Mongrel 的 HTTP 解析器的代码是 here,我很难理解突出显示的函数 http11_parser.c,它似乎在执行实际的 HTTP 处理。
我的问题如下:
- 简单来说,实现背后的基本思想是什么?代码有什么作用?
- 假设有像惯用 C 这样的东西,这段代码是一个很好的例子吗?如果不是,那么所有这些 goto、嵌套 if 和 switch 是否有原因?
PS。关于 Q2,我能找到的使用 goto 的唯一解释是 here。请注意,我对 C 的体验是 0.5(范围从 1 到 10),这解释了为什么我难以理解这段代码!
【问题讨论】:
-
老实说,该代码看起来像是由某个程序生成的(可能类似于
lex?)。绝对不是我会尝试模仿的编码风格。 -
@jxh 你是对的!这是一个基于 Ragel 的解析器。 http11_parser.c 使用 goto 驱动格式从 http11_parser.rl 生成。这就解释了!
-
做得很好。当您发布此内容时,我正在快速输入答案。