2012-01-19 3 views
3

これはFParsecのすべての中で最も不可解コンビネータです...誰かがFParsecでchainl1を使用する例を挙げることはできますか?

http://www.quanttec.com/fparsec/reference/primitives.html#members.chainl1 ...しかし、上の任意のWebページ上で、私の知る限り、ドキュメントで使用したりする方法についての例はありませんインターネット。私はそれを必要とするような左回帰分析を持っていますが、私の人生のために、どのように呼び出すか、何に渡すべきかを理解することはできません。

ここで私は(私自身のC#コードから)chainl1を含むいくつかのきれいな図を持っている:)

+1

このhttp://stackoverflow.com/questions/4559399/can-parser-combinators-be-made-efficientをご覧ください。質問とそこでのいくつかの答えは 'chainl1'を使用しました。 – pad

答えて

2

を私はの終わりに一緒にFParsecでの単純な式パーサを置きますthis unrelated post。ここでは、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 
関連する問題