@@ -4,6 +4,7 @@ import STDLIB/default-primitives.lm;
4
4
import STDLIB/default-rules.lm;
5
5
import STDLIB/default-stdlib.lm;
6
6
7
+ import STRICT/ast.lm;
7
8
import STRICT/utility.lm;
8
9
import STRICT/tokenize.lm;
9
10
import STRICT/parse.lm;
@@ -18,7 +19,7 @@ config-strict := Trueu8;
18
19
config-preprocess := Trueu8;
19
20
config-target := 'tmp.s_s;
20
21
21
- type CompileMode ModeTokenize | ModeParse | ModeTypecheck | ModeCompile;
22
+ type CompileMode ModeTokenize | ModeParse | ModePreprocess | ModeTypecheck | ModeCompile;
22
23
config-mode := (: ModeCompile CompileMode);
23
24
24
25
main := λ(: argc U64)(: argv U8[][]).(tail(
@@ -29,6 +30,7 @@ main := λ(: argc U64)(: argv U8[][]).(tail(
29
30
()
30
31
('--tokenize_s (set config-mode ModeTokenize))
31
32
('--parse_s (set config-mode ModeParse))
33
+ ('--preprocess_s (set config-mode ModePreprocess))
32
34
('--typecheck_s (set config-mode ModeTypecheck))
33
35
('--compile_s (set config-mode ModeCompile))
34
36
('--strict_s (set config-strict Trueu8))
@@ -54,41 +56,35 @@ main := λ(: argc U64)(: argv U8[][]).(tail(
54
56
(print Preprocess:\s_s)(print config-preprocess)(print \n_s)
55
57
(print Strict:\s_s)(print config-strict)(print \n_s)
56
58
57
- # (let continue Trueu8)
58
- # (while (==( continue Trueu8 )) (match input (
59
- # ()
60
- # ( SNil (set continue Falseu8) )
61
- # ( (SCons( SNil rst )) (set input rst) )
62
- # ( (SCons( l rst )) (tail( (print l) (set input rst) )) )
63
- # ( (SCons( (SAtom( fp )) rst )) (tail( (cli-intake fp) (set input rst) )))
64
- # ( (SAtom( fp )) (tail( (cli-intake fp) (set continue False) )))
65
- # )))
59
+ (let continue Trueu8)
60
+ (while (==( continue Trueu8 )) (match input (
61
+ ()
62
+ ( SNil (set continue Falseu8) )
63
+ ( (SCons( rst SNil )) (set input rst) )
64
+ ( (SCons( rst (SAtom( fp )) )) (tail( (tokenize fp) (set input rst) )))
65
+ ( (SAtom( fp )) (tail( (tokenize fp) (set continue Falseu8) )))
66
+ )))
66
67
68
+ (match config-mode (
69
+ ()
70
+ ( ModeTokenize () )
71
+ ( ModeParse (parse ast-tokenized-program) )
72
+ ( ModePreprocess (tail(
73
+ (parse ast-tokenized-program)
74
+ (preprocess ast-parsed-program)
75
+ )))
76
+ ( ModeTypecheck (tail(
77
+ (parse ast-tokenized-program)
78
+ (preprocess ast-parsed-program)
79
+ (typecheck())
80
+ )))
81
+ ( ModeCompile (tail(
82
+ (parse ast-tokenized-program)
83
+ (preprocess ast-parsed-program)
84
+ (typecheck())
85
+ (compile())
86
+ )))
87
+ ))
67
88
68
- # (Compile (
69
- # (parse-program (tokenize-file (head inputs)))
70
- # (set inputs (tail inputs))
71
- # ))
72
- # (Parse (
73
- # (parse-program (tokenize-file (head inputs)))
74
- # (set inputs (tail inputs))
75
- # ))
76
- # (Typecheck (
77
- # (parse-program (tokenize-file (head inputs)))
78
- # (set inputs (tail inputs))
79
- # ))
80
- # (ParseExpression (
81
- # (print-s (parse-expression (tokenize-file (head inputs))))
82
- # (set inputs (tail inputs))
83
- # ))
84
- # (Tokenize (
85
- # (print-s (tokenize-file (head inputs)))
86
- # (set inputs (tail inputs))
87
- # ))
88
89
));
89
90
90
- cli-intake := λ(: fp U8[]) . (: (tail(
91
- (print 'Intake:\s_s)
92
- (print fp)
93
- (print '\n_s)
94
- )) Nil);
0 commit comments