Commit | Line | Data |
---|---|---|
0067158f JM |
1 | program Mal; |
2 | ||
bc6a1f15 JM |
3 | {$H+} // Use AnsiString |
4 | ||
0067158f | 5 | Uses CMem, |
bc6a1f15 | 6 | mal_readline; |
0067158f JM |
7 | |
8 | var | |
9 | Repl_Env: string = ''; | |
bc6a1f15 | 10 | Line : string; |
0067158f JM |
11 | |
12 | // read | |
13 | function READ(const Str: string) : string; | |
14 | begin | |
15 | READ := Str; | |
16 | end; | |
17 | ||
18 | // eval | |
19 | function EVAL(Ast: string; Env: string) : string; | |
20 | begin | |
21 | EVAL := Ast; | |
22 | end; | |
23 | ||
24 | ||
25 | function PRINT(Exp: string) : string; | |
26 | begin | |
27 | PRINT := Exp; | |
28 | end; | |
29 | ||
30 | // repl | |
31 | function REP(Str: string) : string; | |
32 | begin | |
33 | REP := PRINT(EVAL(READ(Str), Repl_Env)); | |
34 | end; | |
35 | ||
36 | begin | |
37 | while True do | |
38 | begin | |
bc6a1f15 JM |
39 | try |
40 | Line := _readline('user> '); | |
41 | if Line = '' then continue; | |
42 | WriteLn(REP(Line)) | |
43 | except | |
44 | On E : MalEOF do Halt(0); | |
45 | end; | |
0067158f JM |
46 | end; |
47 | end. |