-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
110 lines (86 loc) · 2.07 KB
/
main.go
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package main
import (
"flag"
"fmt"
"io/ioutil"
"log"
"path/filepath"
. "github.com/BEN00262/simpleLang/evaluator"
)
var (
fileName = flag.String("filename", "", "< filename > filename to execute")
mode = flag.String("mode", "e", "< mode > i or e or l mode to run the interpreter") // l ( generate doc or execute the code )
operation = flag.String("operation", "d", "< operation > e or d operation to run the literal compiler in")
outfile = flag.String("out", "", "< out file > filename to write the documentation to")
)
func getFileData(filename string) (string, string) {
// how are we going to find the path of the file?
path, err := filepath.Abs(filename)
if err != nil {
log.Fatal(err.Error())
}
data, err := ioutil.ReadFile(path)
if err != nil {
panic(err.Error())
}
return filepath.Dir(path), string(data)
}
func main() {
flag.Parse()
switch *mode {
case "e":
{
if *fileName == "" {
flag.Usage()
return
}
Interpreter(getFileData(*fileName))
}
case "i":
{
REPL()
}
case "l":
{
if *fileName == "" {
flag.Usage()
return
}
literalParser := InitLiteralParsing(getFileData(*fileName))
switch *operation {
case "e":
{
literalParser.ExecuteLiteralCode()
}
case "d":
{
htmlDocumentation := literalParser.GenerateDocumentation()
if *outfile == "" {
fmt.Println(htmlDocumentation)
return
}
if err := ioutil.WriteFile(*outfile, []byte(htmlDocumentation), 0600); err != nil {
panic(err.Error())
}
}
}
}
}
}
// func main() {
// // experiment with calling function from Daisy
// evaluator := NewEvaluatorContext()
// // inject all global functions
// evaluator.InitGlobalScope()
// LoadGlobalsToContext(evaluator)
// lexer := InitLexer(`
// fun printName(first, second) {
// return first + second
// }
// `)
// parser := InitParser(lexer.Lex())
// evaluator.ReplExecute(parser.Parse())
// value := DaisyInvoke(evaluator, "printName", ToDaisy(400), ToDaisy(23))
// fmt.Println(FromDaisy(value))
// evaluator.TearDownRepl()
// }