/
cli.lm
92 lines (83 loc) · 2.54 KB
/
cli.lm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import STDLIB/default-instruction-set.lm;
import STDLIB/default-primitives.lm;
import STDLIB/default-rules.lm;
import STDLIB/default-stdlib.lm;
import STRICT/ast.lm;
import STRICT/utility.lm;
import STRICT/tokenize.lm;
import STRICT/parse.lm;
import STRICT/typecheck.lm;
import STRICT/preprocess.lm;
import STRICT/expression.lm;
import STRICT/codegen.lm;
import STRICT/fragment.lm;
import STRICT/context.lm;
import STRICT/assemble.lm;
import STRICT/data.lm;
config-strict := True_u8;
config-preprocess := True_u8;
config-target := 'tmp.s_s;
type CompileMode ModeTokenize | ModeParse | ModePreprocess | ModeTypecheck | ModeCompile;
config-mode := (: ModeCompile CompileMode);
main := λ(: argc U64)(: argv String[]). (: (tail(
(let argi 1_u64)
(let input SNil)
()
(while (<( argi argc )) (
(match ([]( argv argi )) (
()
('--tokenize_s (set config-mode ModeTokenize))
('--parse_s (set config-mode ModeParse))
('--preprocess_s (set config-mode ModePreprocess))
('--typecheck_s (set config-mode ModeTypecheck))
('--compile_s (set config-mode ModeCompile))
('--strict_s (set config-strict True_u8))
('--gradual_s (set config-strict False_u8))
('--macro_s (set config-preprocess True_u8))
('--nomacro_s (set config-preprocess False_u8))
('-o_s (tail(
(set argi (+( argi 1_u64 )))
(set config-target ([]( argv argi )))
)))
(fp (
(set input (SCons(
(close input)
(close (SAtom( fp )))
)))
))
))
(set argi (+( argi 1_u64 )))
))
(let continue True_u8)
(while (==( continue True_u8 )) (match input (
()
( SNil (set continue False_u8) )
( (SCons( rst SNil )) (set input rst) )
( (SCons( rst (SAtom( fp )) )) (tail( (tokenize fp) (set input rst) )))
( (SAtom( fp )) (tail( (tokenize fp) (set continue False_u8) )))
)))
(match config-mode (
()
( ModeTokenize (print ast-tokenized-program) )
( ModeParse (tail(
(parse())
(serialize-ast ast-parsed-program)
)))
( ModePreprocess (tail(
(parse())
(preprocess())
(serialize-ast ast-parsed-program)
)))
( ModeTypecheck (tail(
(parse())
(preprocess())
(typecheck())
)))
( ModeCompile (tail(
(parse())
(preprocess())
(typecheck())
(compile())
)))
))
)) Nil);