これは FParsec の中で最も不可解なコンビネータです...
http://www.quanttec.com/fparsec/reference/primitives.html#members.chainl1
...しかし、ドキュメントやインターネット上の Web ページでの使用方法の例はありません。私はそれを必要とするように見える左再帰解析を持っていますが、私の人生では、それを呼び出す方法やそれに何を渡すかを理解できません。
助けてください :)
これは FParsec の中で最も不可解なコンビネータです...
http://www.quanttec.com/fparsec/reference/primitives.html#members.chainl1
...しかし、ドキュメントやインターネット上の Web ページでの使用方法の例はありません。私はそれを必要とするように見える左再帰解析を持っていますが、私の人生では、それを呼び出す方法やそれに何を渡すかを理解できません。
助けてください :)
chainl1
私はここに(私自身のC#コードから)を含むいくつかのきれいな図を持っています:
http://lorgonblog.wordpress.com/2007/12/04/monadic-parser-combinators-part-three/
この無関係な投稿の最後に、単純な式パーサーを FParsec にまとめました。chainl1
これは、オペランドと演算子のパーサーから連鎖演算子式のパーサーを作成するために使用する抜粋です。
(* fop : (double -> double -> double) -> (env -> double) -> (env -> double) -> env -> double *)
let fop op fa fb env = fa env |> op <| fb env
(* Parse single operators - return function taking two operands and giving the result *)
let (addop : Parser<_,unit>) =
sym "+" >>% fop (+)
<|> ( sym "-" >>% fop (-) )
(* term, expr - chain of operators of a given precedence *)
let term = chainl1 atom mulop
let expr = chainl1 term addop