parsing f# fparsec

parsing - La gramática recursiva de Fparsec arroja StackOverflowException



f# (0)

Tengo este código

type Exprs = | Val of float | Mult of Exprs * Exprs | Plus of Exprs * Exprs let pexpr, exprRef = createParserForwardedToRef<Exprs, unit>() let pval = pfloat |>> Val let binaryOp s = (ws >>. pexpr.>> ws) .>>. (ws >>. str s >>. ws >>. pexpr) let pplus = binaryOp "+" |>> Plus let pmuil = binaryOp "*" |>> Mult do exprRef := choice [ attempt pmuil pplus pval ] let expression = ws >>. pexpr .>> ws

Cuando lo evaluó arroja StackoverflowExcpetion. Entonces la pregunta es ¿cómo puedo escribirlo sin recurrencia infinita?