FSharpのパーサーコンビネータライブラリ。
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みたいな便利ライブラリが提供出来るのはパーサーコンビネータの威力やね。