@@ -4,6 +4,7 @@ import STDLIB/default-primitives.lm;
44import STDLIB/default-rules.lm;
55import STDLIB/default-stdlib.lm;
66
7+ import STRICT/ast.lm;
78import STRICT/utility.lm;
89import STRICT/tokenize.lm;
910import STRICT/parse.lm;
@@ -18,7 +19,7 @@ config-strict := Trueu8;
1819config-preprocess := Trueu8;
1920config-target := 'tmp.s_s;
2021
21- type CompileMode ModeTokenize | ModeParse | ModeTypecheck | ModeCompile;
22+ type CompileMode ModeTokenize | ModeParse | ModePreprocess | ModeTypecheck | ModeCompile;
2223config-mode := (: ModeCompile CompileMode);
2324
2425main := λ(: argc U64)(: argv U8[][]).(tail(
@@ -29,6 +30,7 @@ main := λ(: argc U64)(: argv U8[][]).(tail(
2930 ()
3031 ('--tokenize_s (set config-mode ModeTokenize))
3132 ('--parse_s (set config-mode ModeParse))
33+ ('--preprocess_s (set config-mode ModePreprocess))
3234 ('--typecheck_s (set config-mode ModeTypecheck))
3335 ('--compile_s (set config-mode ModeCompile))
3436 ('--strict_s (set config-strict Trueu8))
@@ -54,41 +56,35 @@ main := λ(: argc U64)(: argv U8[][]).(tail(
5456 (print Preprocess:\s_s)(print config-preprocess)(print \n_s)
5557 (print Strict:\s_s)(print config-strict)(print \n_s)
5658
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+ )))
6667
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+ ))
6788
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- # ))
8889));
8990
90- cli-intake := λ(: fp U8[]) . (: (tail(
91- (print 'Intake:\s_s)
92- (print fp)
93- (print '\n_s)
94- )) Nil);
0 commit comments