28 lines
724 B
Plaintext
28 lines
724 B
Plaintext
open System.Text
|
|
open FSharp.Text.Lexing
|
|
open FSharp.Text.Parsing
|
|
|
|
(* Both lex and parse a program. *)
|
|
let parse (s : string) =
|
|
Parser.Prog Lexer.Token
|
|
<| LexBuffer<_>.FromBytes (Encoding.UTF8.GetBytes s)
|
|
|
|
(* Continually evaluate user expressions. *)
|
|
let loop () =
|
|
let mutable running = true
|
|
while running do
|
|
printf "Input an expression: "
|
|
try
|
|
let program = System.Console.ReadLine()
|
|
if program = "exit"
|
|
then
|
|
running <- false
|
|
else
|
|
printfn "Parse result: %A" (parse program)
|
|
with
|
|
| Failure msg -> printfn "%s" msg
|
|
| :? System.ArgumentNullException ->
|
|
running <- false
|
|
|
|
loop ()
|