MCPcopy Create free account
hub / github.com/davidkingzyb/SCAST / parse

Function parse

js/SCAST.js:222–604  ·  view source on GitHub ↗
(input)

Source from the content-addressed store, hash-verified

220 }
221
222 function parse(input) {
223 return parse_toplevel();
224 function is_punc(ch) {
225 var tok = input.peek();
226 return tok && tok.type == "punc" && (!ch || tok.value == ch) && tok;
227 }
228 function is_sp(ch) {
229 var tok = input.peek();
230 return tok && tok.type == "sp" && (!ch || tok.value == ch) && tok;
231 }
232 function is_kw(kw) {
233 var tok = input.peek();
234 return tok && tok.type == "kw" && (!kw || tok.value == kw) && tok;
235 }
236 function is_op(op) {
237 var tok = input.peek();
238 return tok && tok.type == "op" && (!op || tok.value == op) && tok;
239 }
240 function is_id() {
241 var tok = input.peek();
242 return tok.type=='id';
243 }
244 function is_num(){
245 var tok = input.peek();
246 return tok.type=='num';
247 }
248 function is_str(){
249 var tok = input.peek();
250 return tok.type=='str';
251 }
252
253 function skip_punc(ch) {
254 if (is_punc(ch)) input.next();
255 else input.croak("Expecting punctuation: \"" + ch + "\"");
256 }
257 function skip_split(ch) {
258 if (is_sp(ch)) input.next();
259 else input.croak("Expecting punctuation: \"" + ch + "\"");
260 }
261 function unexpected() {
262 input.croak("Unexpected token: " + JSON.stringify(input.peek()));
263 }
264 function parse_next() {
265 var n = input.next();
266 return n;
267 }
268 function parse_toplevel() {
269 var prog = [];
270 while (!input.eof()) {
271 prog.push(parse_statement());
272 }
273 return { type: "top", 'body': prog };
274 }
275 function parse_block() {
276 var poi={line:input.peek().poi.line,start:input.peek().poi.start}
277 var body = [];
278 skip_punc("{");
279 while (!is_punc("}")) {

Callers 1

getAstFunction · 0.70

Calls 1

parse_toplevelFunction · 0.70

Tested by

no test coverage detected