私はFParsecを使用して空白に敏感なパーサーを実装しようとしています。そして、n
空白の文字で始まるテキストの行を解析する関数を定義するという赤ちゃんのステップから始めています。
これが私がこれまでに持っているものです:
let test: Parser<string list,int>
= let manyNSatisfy i p = manyMinMaxSatisfy i i p
let p = fun (stream:CharStream<int>) ->
let state = stream.UserState
// Should fail softly if `state` chars wasn't parsed
let result = attempt <| manyNSatisfy state (System.Char.IsWhiteSpace) <| stream
if result.Status <> Ok
then result
else restOfLine false <| stream
sepBy p newline
私の問題は私が走るとき
runParserOnString test 1 "test" " hi\n there\nyou" |> printfn "%A"
「あなた」でエラーが発生します。attempt
私は、状態の変化をさかのぼって追跡Error
し、自分のステータスがソフトな失敗を与えるので戻るという印象を受けました。
["hi"; "there"]
パーサーから戻るにはどうすればよいですか?