mlox/lib/lox.ml

30 lines
810 B
OCaml
Raw Normal View History

2024-08-02 00:10:48 +02:00
let ( let* ) = Result.bind
module Error = Error
2024-08-12 16:31:28 +02:00
module Expr = Expr
module Lexer = Lexer
module Parser = Parser
2024-08-02 00:10:48 +02:00
type token = Lexer.token
type lox_error = Error.lox_error
type lox_value = Nil
let run (source : string) : (unit, lox_error) result =
let* tokens = Error.of_lexer_error (Lexer.tokenize source) in
let f token = Printf.printf "%s " (Lexer.show_token token) in
Printf.printf "Got %d tokens\n" (List.length tokens);
List.iter f tokens;
print_endline "";
2024-08-12 16:31:28 +02:00
let* expr = Error.of_parser_error (Parser.parse tokens) in
Printf.printf "%s\n" (Expr.show_expr expr);
2024-08-02 00:10:48 +02:00
Ok ()
let runRepl () : unit =
try
while true do
print_string "> ";
let line = read_line () in
let result = run line in
Result.iter_error Error.print_error result
done
with End_of_file -> ()