MCPcopy Index your code
hub / github.com/tc39/proposal-observable / parse

Function parse

demo/parser.js:20–102  ·  view source on GitHub ↗
(tokenStream)

Source from the content-addressed store, hash-verified

18
19// Returns an observable which outputs an AST from an input observable of token objects
20function parse(tokenStream) {
21
22 let current = null;
23
24 function* peek() {
25
26 if (current === null)
27 current = yield;
28
29 return current;
30 }
31
32 function* eat(type = "") {
33
34 let token = yield * peek();
35
36 if (type && token.type !== type)
37 throw new SyntaxError("Expected " + type);
38
39 current = null;
40 return token;
41 }
42
43 function* parseAdd() {
44
45 let node = yield * parseMultiply();
46
47 while ((yield * peek()).type === "+") {
48
49 yield * eat();
50 let right = yield * parseMultiply()
51 node = { type: "+", left: node, right, value: node.value + right.value };
52 }
53
54 return node;
55 }
56
57 function* parseMultiply() {
58
59 let node = yield * eat("NUMBER");
60
61 while ((yield * peek()).type === "*") {
62
63 yield * eat();
64 let right = yield * eat("NUMBER");
65 node = { type: "*", left: node, right, value: node.value * right.value };
66 }
67
68 return node;
69 }
70
71 function* start() {
72
73 let ast = yield * parseAdd();
74 yield * eat("EOF");
75 return ast;
76 };
77

Callers 1

parser.jsFile · 0.85

Calls 2

subscribeMethod · 0.80
startFunction · 0.70

Tested by

no test coverage detected