RandomThoughts

RandomThoughts

FParsec

Contents:
  1. FS0030とその対策
  2. 再帰とバックトラック

FSharpのパーサーコンビネータライブラリ。

FS0030とその対策

tutorialをコピペしていじろうとしたら、以下のコードでFS0030のエラーが。

let ws = spaces
let float_ws = pfloat .>> ws

なんで?とググっていたら、以下のSOが見つかる。

parsing - FParsec and pipe3 make the arguments explicit or add a type notation - Stack Overflow

良くわからないが、testまで呼ばないと型が確定しないのか。

再帰とバックトラック

再帰はcreateParserForwardedToRef、バックトラックはattemptだった。 この辺を理解してからCalculatorのサンプルを見ると、OperatorPrecedenceParserも難しいところは無い事が分かる。

OperatorPrecedenceParserみたいな便利ライブラリが提供出来るのはパーサーコンビネータの威力やね。