【发布时间】:2019-03-07 07:45:15
【问题描述】:
我正在尝试解决编程中最可怕的部分,那就是解析和 AST。我正在研究一个使用 F# 和 FParsec 的简单示例。我想解析一系列简单的乘法。不过,我只是回到了第一个学期。这是我目前所拥有的:
open FParsec
let test p str =
match run p str with
| Success(result, _, _) -> printfn "Success: %A" result
| Failure(errorMsg, _, _) -> printfn "Failure: %s" errorMsg
type Expr =
| Float of float
| Multiply of Expr * Expr
let parseExpr, impl = createParserForwardedToRef ()
let pNumber = pfloat .>> spaces |>> (Float)
let pMultiply = parseExpr .>> pstring "*" >>. parseExpr
impl := pNumber <|> pMultiply
test parseExpr "2.0 * 3.0 * 4.0 * 5.0"
当我运行它时,我得到以下信息:
> test parseExpr "2.0 * 3.0 * 4.0 * 5.0";;
Success: Float 2.0
val it : unit = ()
我希望得到一组嵌套的乘法。我觉得我错过了一些非常明显的东西。
【问题讨论】: