1

Ragel を使用してステート マシンで (ソケットからの) バイトの連続ストリームを解析したい

ただし、私が見つけたすべての例は、1回のパスで完全なファイルを解析している ( Gherkin lexer のように)か、Ragels C Target ( mongrel HTTP1.1 Parserのように)を使用しています。

Ragel State マシンをインスタンス化し、それにバイトを追加して、既存の状態をそのまま維持する方法に関するアドバイスや例を探しています。

私が探している最終的なインターフェースは次のようなものです:

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をご覧になりましたか? ステート マシン イベント (問題の文字) を 1 つずつフィードできるようです。

于 2010-01-17T00:28:27.830 に答える
0

あなたが探しているものとは正確には異なるかもしれませんが、Dhaka はもう1 つの優れたパーサー ジェネレーターです。それが役立つかどうかはわかりませんが、過去によく役に立ちました。

于 2010-01-16T22:55:48.383 に答える