blob: d8b65afe63507ce1fe88e07029d765374cc742ee (
plain)
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
|
(ns lang
(:require (lang [lexer :as &lexer]
[parser :as &parser]
[type :as &type]
[analyser :as &analyser]
[compiler :as &compiler])
:reload))
(defn write-file [file data]
(with-open [stream (java.io.BufferedOutputStream. (java.io.FileOutputStream. file))]
(.write stream data)))
(comment
(let [source-code (slurp "test2.lang")
tokens (&lexer/lex source-code)
;; _ (prn 'tokens tokens)
syntax (&parser/parse tokens)
;; _ (prn 'syntax syntax)
class-data (&compiler/compile "test2" syntax)]
(write-file "test2.class" class-data))
(->> (slurp "test2.lang")
&lexer/lex
&parser/parse
(&compiler/compile "test2")
(write-file "test2.class"))
(->> (slurp "test2.lang")
&lexer/lex
&parser/parse
(&analyser/analyse "test2"))
(let [source-code (slurp "test2.lang")
tokens (&lexer/lex source-code)
;; _ (prn 'tokens tokens)
syntax (&parser/parse tokens)
;; _ (prn 'syntax syntax)
ann-syntax (&analyser/analyse "test2" syntax)
_ (prn 'ann-syntax ann-syntax)
class-data (&compiler/compile "test2" syntax)]
(write-file "test2.class" class-data))
(let [source-code (slurp "test2.lang")
tokens (&lexer/lex source-code)
;; _ (prn 'tokens tokens)
syntax (&parser/parse tokens)
;; _ (prn 'syntax syntax)
ann-syntax (&analyser/analyse "test2" syntax)
_ (prn 'ann-syntax ann-syntax)
class-data (&compiler/compile "test2" ann-syntax)]
(write-file "test2.class" class-data))
;; TODO: Define functions as classes inheriting Function.
;; TODO: Allow importing Java classes.
;; TODO: Allow using other modules.
;; TODO: Add tuples.
;; TODO: Add thunks.
;; TODO: Add pattern-matching.
;; TODO: Add Java-interop.
;; TODO: Do tail-call optimization.
;; TODO: Add macros.
;; TODO: Add signatures & structures OR type-classes.
;; TODO: Add type-level computations.
;; TODO: Add interpreter.
;; TODO: Re-implement compiler in language.
;; TODO: Add all the missing literal types.
;; TODO: Allow strings to have escape characters.
;; TODO:
;; jar cvf test2.jar test2 test2.class
;; java -cp "test2.jar" test2
;; jar cvf test2.jar test2 test2.class && java -cp "test2.jar" test2
)
|