0
Noob警報!使用fparsec從子分析器返回的函數
好吧,我試圖在fparsec中構建一個簡單的數學表達式解析器。現在我想要做的就是處理這樣的「1 + 2-3 * 4/5」字符串,並返回一個雙倍的評價結果。沒有空格,換行符或者parens,並且從左到右的操作順序沒問題。
這是我到目前爲止有:
let number = many1 digit |>> fun ds -> int <| String.Concat(ds)
let op : Parser<int -> int -> int, unit> =
charReturn '+' (+) <|>
charReturn '-' (-) <|>
charReturn '*' (*) <|>
charReturn '/' (/)
let expression, expressionImpl = createParserForwardedToRef()
do expressionImpl :=
choice[
attempt(number .>> op >>. expression);
number]
let test p str =
match run (p .>> eof) str with
| Success(result, _, _) -> printfn "Success: %A" result
| Failure(result, _, _) -> printfn "Failure: %A" result
[<EntryPoint>]
let main argv =
test expression "1+1/2*3-4"
Console.Read() |> ignore
0
在表達式解析器的第一選擇,我不知道如何申請由運解析器返回的功能。