FParsec をいじり始めたばかりで、次の形式で文字列を解析しようとしています。
10*0.5 0.25 0.75 3*0.1 0.9
たとえば、3*0.1 を 0.1 0.1 0.1 に展開したい
私がこれまでに持っているものは次のとおりです
type UserState = unit
type Parser<'t> = Parser<'t, UserState>
let str s : Parser<_> = pstring s
let float_ws : Parser<_> = pfloat .>> spaces
let product = pipe2 pint32 (str "*" >>. float_ws) (fun x y -> List.init x (fun i -> y))
製品パーサーは、フォーマットのエントリを正しく解析し、int*float
それを float のリストに展開します。ただし、フロートまたはフロートのみを解析できるソリューションを思い付くのに苦労していますint*float
。私は次のようなことをしたいと思います
many (product <|> float_ws)
もちろん、パーサーの戻り値の型が異なるため、これは機能しません。これを機能させる方法についてのアイデアはありますか?float_ws を変更して、float が 1 つだけのリストを返すようにラップすることは可能ですか?