Noob alert!Применение функции, возвращаемой из подпараметра с помощью 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
В первом выборе выражения синтаксического анализа, я не знаю, как применить функцию, возвращаемую оп анализатором.