次オプションの末尾のカンマを処理するにはどうすればよいですか?
let maxCount = System.Int32.MaxValue
let pmlcomment = pstring "/*" >>. skipCharsTillString "*/" true (maxCount)
let ws = pspaces >>. many (pspaces >>. pmlcomment .>> pspaces) |>> (function | [] ->() | _ ->())
let str_ws s = pstring s .>> ws
let exprBraceSeqOpt p =
let trailingComma = (str_ws "," |>> fun _ -> None)
between (str_ws "{") (str_ws "}") ((opt (attempt (sepBy p (str_ws ",")))) <|> (attempt trailingComma))
let sampleP = exprBraceSeqOpt (str_ws "x")
与えられ、それが正しく、最後の1を除いて、次のすべてに一致します。
["{}";"{x}";"{x,x}";"{x,x,}"]
私は何かが状態か何かを変えている推測しています。
fparsecでオプションの後続カンマを処理するにはどうすればよいですか?
おそらく 'opt(試みtrailingComma)'でしょうか? – Yawar
いいえ、それはコンパイルされません – Maslow