fdf28b76 |
1 | #! /usr/bin/env crystal run |
2 | |
5185c56e |
3 | require "readline" |
fdf28b76 |
4 | require "./reader" |
5 | require "./printer" |
6 | |
7 | # Note: |
8 | # Employed downcase names because Crystal prohibits uppercase names for methods |
9 | |
97d0deb1 |
10 | module Mal |
11 | extend self |
fdf28b76 |
12 | |
97d0deb1 |
13 | def read(str) |
14 | read_str str |
15 | end |
fdf28b76 |
16 | |
97d0deb1 |
17 | def eval(x) |
5185c56e |
18 | x |
97d0deb1 |
19 | end |
20 | |
21 | def print(result) |
22 | pr_str(result, true) |
23 | end |
fdf28b76 |
24 | |
97d0deb1 |
25 | def rep(str) |
26 | print(eval(read(str))) |
27 | end |
fdf28b76 |
28 | end |
29 | |
5185c56e |
30 | while line = Readline.readline("user> ", true) |
afc3a8d5 |
31 | begin |
97d0deb1 |
32 | puts Mal.rep(line) |
afc3a8d5 |
33 | rescue e |
34 | STDERR.puts e |
35 | end |
fdf28b76 |
36 | end |