1

我想使用 Ragel 使用状态机解析连续的字节流(来自套接字)

但是,我发现的所有示例要么一次性解析完整文件(如Gherkin 词法分析器,要么使用 Ragels C Target(如mongrel HTTP1.1 Parser

我正在寻找一些关于如何实例化 Ragel 状态机然后向其添加字节以保持现有状态完整的建议或示例。

我正在寻找的最终界面类似于:

parser = MyStreamParser.new(Grammar)
parser.on_token { |t| puts t.inspect }

# I can't parse lines seperately because tokens can span multiple lines.
$stdin.each_line do |line|
  parser.add(line)
end

非常感谢有关如何在 Ragel 中执行此操作的任何建议。我宁愿使用它,也不愿手动编写另一个状态机。

也许 Ragel 不是正确的工具?如果不是:我应该改用什么?

4

2 回答 2

1

乍一看,Ragel 看起来不像 Ruby。你看过Statemachine吗?看起来您可以一次提供一个状态机事件(字符,在您的问题中)。

于 2010-01-17T00:28:27.830 回答
0

它可能不是您正在寻找的,但Dhaka是另一个值得一看的不错的解析器生成器。我不确定这会有所帮助,但它在过去对我很有帮助。

于 2010-01-16T22:55:48.383 回答