1

次のパーサーを定義しているとしましょう。

let identifier = many1Satisfy isLetter //match an identifier
let parser = identifier //our parser is only to match identifiers
test parser " abc" //the text to parse contains a leading space which should yield us an error

解析すると、予想どおりエラーが発生します。

Failure: Error in Ln: 1 Col: 1
 abc
^
Unknown Error(s)

なぜ彼が手紙を期待しているのに手紙が見つからないのかが問題だと判断できないのか興味があります。その情報を自分でパーサーに追加する予定はありますか?

4

2 に答える 2

2

何が問題なのかわからない理由について:これは「many1Satisfy」が原因だと思います。このコンビネータが別のパーサーをラップしているのがわかりますが、「many1」のどの状態でエラーが発生したかはわかりません。どのようなエラーではないので、「不明なエラー」と表示されます

これは機能するはずです:

let ws = spaces
let identifier = ws >>. (many1Satisfy isLetter) //match an identifier, ignore whitespaces infront
let parser = identifier //our parser is only to match identifiers
test parser " abc"
于 2011-08-27T07:57:22.997 に答える
0

空白は通常の文字ではありません。あなたの場合、空白を無視する必要があり、そのためには、空白を無視するパーサーでパーサーを構成し、この新しく構成されたパーサーを使用して識別子を解析する必要があります。

チェック4.6空白の処理

于 2011-08-27T07:51:04.360 に答える