-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdscript.js
210 lines (208 loc) · 9.11 KB
/
dscript.js
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
// Generated automatically by nearley, version 2.20.1
// http://github.com/Hardmath123/nearley
(function () {
function id(x) { return x[0]; }
const myLexer = require("./lexer");
var grammar = {
Lexer: myLexer,
ParserRules: [
{"name": "statements", "symbols": ["statements", (myLexer.has("NL") ? {type: "NL"} : NL), "_", "statement", "_"], "postprocess":
(data) => {
return [...data[0], data[3]]
}
},
{"name": "statements", "symbols": ["_", "statement", "_"], "postprocess":
(data) =>{
return [data[1]]
}
},
{"name": "statement", "symbols": ["var_assign"], "postprocess": id},
{"name": "statement", "symbols": ["fun_call"], "postprocess": id},
{"name": "statement", "symbols": ["fun_dec"], "postprocess": id},
{"name": "statement", "symbols": ["return_sta"], "postprocess": id},
{"name": "statement", "symbols": ["if"], "postprocess": id},
{"name": "var_assign", "symbols": [{"literal":"mut"}, "_", (myLexer.has("identifier") ? {type: "identifier"} : identifier), "_", (myLexer.has("assign") ? {type: "assign"} : assign), "_", "expr"], "postprocess":
(data) => {
return{
type: "var_assign",
var_name: data[2],
value: data[6],
kind: "let"
}
}
},
{"name": "var_assign", "symbols": [(myLexer.has("identifier") ? {type: "identifier"} : identifier), "_", (myLexer.has("assign") ? {type: "assign"} : assign), "_", "expr"], "postprocess":
(data) => {
return{
type: "var_assign",
var_name: data[0],
value: data[4],
kind: "const"
}
}
},
{"name": "if", "symbols": [{"literal":"if"}, "__", "condition", "__", {"literal":"{"}, (myLexer.has("NL") ? {type: "NL"} : NL), "statements", (myLexer.has("NL") ? {type: "NL"} : NL), {"literal":"}"}], "postprocess":
(data) => {
return{
type: "if_statement",
condition: data[2],
body: data[6]
}
}
},
{"name": "condition", "symbols": ["expr", "__", "comp_opr", "__", "expr"], "postprocess":
(data) => {
return{
left_value: data[0],
opr: data[2],
right_value: data[4]
}
}
},
{"name": "comp_opr", "symbols": [{"literal":">"}], "postprocess": id},
{"name": "comp_opr", "symbols": [{"literal":"<"}], "postprocess": id},
{"name": "comp_opr", "symbols": [{"literal":"and"}], "postprocess": id},
{"name": "comp_opr", "symbols": [{"literal":"or"}], "postprocess": id},
{"name": "comp_opr", "symbols": [{"literal":"=="}], "postprocess": id},
{"name": "comp_opr", "symbols": [{"literal":"==="}], "postprocess": id},
{"name": "comp_opr", "symbols": [{"literal":">="}], "postprocess": id},
{"name": "comp_opr", "symbols": [{"literal":"<="}], "postprocess": id},
{"name": "fun_dec", "symbols": [{"literal":"fn"}, "__", (myLexer.has("identifier") ? {type: "identifier"} : identifier), "_", {"literal":"("}, "_", "param_list", "_", {"literal":")"}, {"literal":"{"}, (myLexer.has("NL") ? {type: "NL"} : NL), "fun_body", (myLexer.has("NL") ? {type: "NL"} : NL), {"literal":"}"}], "postprocess":
(data) => {
return{
type: "fun_dec",
fun_name: data[2],
params: data[6],
body: data[11]
}
}
},
{"name": "fun_body", "symbols": ["_", "expr", "_"], "postprocess":
(data) => {
return [data[1]]
}
},
{"name": "fun_body", "symbols": [{"literal":"{"}, (myLexer.has("NL") ? {type: "NL"} : NL), "_", "statements", "_", (myLexer.has("NL") ? {type: "NL"} : NL), {"literal":"}"}], "postprocess":
(data) =>{
return data[3]
}
},
{"name": "fun_body", "symbols": ["_", {"literal":"return"}, "__", "return_sta"], "postprocess":
(data) => {
return {
type: "return",
tbr: data[3]}
}
},
{"name": "return_sta", "symbols": ["expr"], "postprocess":
(data) => {
return [data[0]]
}
},
{"name": "return_sta", "symbols": ["expr", "__", "return_sta"], "postprocess":
(data) => {
return [data[0], ...data[2]]
}
},
{"name": "param_list", "symbols": [(myLexer.has("identifier") ? {type: "identifier"} : identifier)], "postprocess":
(data) => {
return [data[0]]
}
},
{"name": "param_list", "symbols": ["param_list", "__", (myLexer.has("identifier") ? {type: "identifier"} : identifier)], "postprocess":
(data) => {
return [...data[0], data[2]]
}
},
{"name": "param_list", "symbols": [], "postprocess":
(data) => {
return []
}
},
{"name": "arg_list", "symbols": ["expr"], "postprocess":
(data) => {
return [data[0]]
}
},
{"name": "arg_list", "symbols": [], "postprocess":
(data)=> {
return []
}
},
{"name": "arg_list", "symbols": ["arg_list", "__", "expr"], "postprocess":
(data) => {
return [...data[0], data[2]];
}
},
{"name": "fun_call", "symbols": [(myLexer.has("identifier") ? {type: "identifier"} : identifier), "_", {"literal":"("}, "_", "arg_list", "_", {"literal":")"}], "postprocess":
(data) => {
return{
type: "fun_call",
fun_name: data[0],
arguments: data[4]
}
}
},
{"name": "arg_list", "symbols": ["expr"], "postprocess":
(data) => {
return [data[0]]
}
},
{"name": "arg_list", "symbols": [], "postprocess":
(data)=> {
return []
}
},
{"name": "arg_list", "symbols": ["arg_list", "__", "expr"], "postprocess":
(data) => {
return [...data[0], data[2]]
}
},
{"name": "expr", "symbols": [(myLexer.has("string") ? {type: "string"} : string)], "postprocess": id},
{"name": "expr", "symbols": [(myLexer.has("number") ? {type: "number"} : number)], "postprocess": id},
{"name": "expr", "symbols": [(myLexer.has("identifier") ? {type: "identifier"} : identifier)], "postprocess": id},
{"name": "expr", "symbols": ["boolean"], "postprocess": id},
{"name": "expr", "symbols": ["array"], "postprocess": id},
{"name": "expr", "symbols": ["fun_call"], "postprocess": id},
{"name": "boolean", "symbols": [(myLexer.has("true") ? {type: "true"} : true)]},
{"name": "boolean", "symbols": [(myLexer.has("false") ? {type: "false"} : false)]},
{"name": "array", "symbols": [{"literal":"["}, "array_items", {"literal":"]"}], "postprocess":
(data) => {
return{
type: "Array",
value: data[1].map((l)=>{
return l.value
})
}
}
},
{"name": "array", "symbols": [{"literal":"["}, {"literal":"]"}]},
{"name": "array_items", "symbols": ["value"], "postprocess":
(data) =>{
return [data[0]]
}
},
{"name": "array_items", "symbols": ["value", "_", {"literal":","}, "_", "array_items"], "postprocess":
(data)=>{
return [data[0],...data[4]]
}
},
{"name": "value", "symbols": [(myLexer.has("string") ? {type: "string"} : string)], "postprocess": id},
{"name": "value", "symbols": [(myLexer.has("number") ? {type: "number"} : number)], "postprocess": id},
{"name": "value", "symbols": [(myLexer.has("identifier") ? {type: "identifier"} : identifier)], "postprocess": id},
{"name": "value", "symbols": ["boolean"], "postprocess": id},
{"name": "_$ebnf$1", "symbols": []},
{"name": "_$ebnf$1", "symbols": ["_$ebnf$1", (myLexer.has("WS") ? {type: "WS"} : WS)], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
{"name": "_", "symbols": ["_$ebnf$1"], "postprocess": id},
{"name": "__$ebnf$1", "symbols": [(myLexer.has("WS") ? {type: "WS"} : WS)]},
{"name": "__$ebnf$1", "symbols": ["__$ebnf$1", (myLexer.has("WS") ? {type: "WS"} : WS)], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
{"name": "__", "symbols": ["__$ebnf$1"], "postprocess": id}
]
, ParserStart: "statements"
}
if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') {
module.exports = grammar;
} else {
window.grammar = grammar;
}
})();