Mercurial > jsparser
annotate jsparser.js @ 10:8de776b8ed31
made the demo work on the web instead of the command line.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Sat, 30 May 2009 16:08:25 -0700 |
parents | bc6f30e0f948 |
children | 95b27aa47788 |
rev | line source |
---|---|
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
1 var Parsing = {}; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
2 |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
3 Parsing.Symbol = function Symbol(options) { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
4 if (options) |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
5 for (name in options) |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
6 if (options.hasOwnProperty(name)) |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
7 this[name] = options[name]; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
8 }; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
9 |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
10 Parsing.Symbol.prototype = { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
11 leftBindingPower: 0, |
4
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
12 nullDenotation: function() { |
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
13 throw new Error("No nullDenotation for " + this.name); |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
14 }, |
4
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
15 leftDenotation: function() { |
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
16 throw new Error("No leftDenotation for " + this.name); |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
17 }, |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
18 extend: function(contents) { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
19 function Subclass() {} |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
20 Subclass.prototype = this; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
21 var instance = new Subclass(); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
22 if (contents) |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
23 for (name in contents) |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
24 if (contents.hasOwnProperty(name)) |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
25 instance[name] = contents[name]; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
26 return instance; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
27 }, |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
28 makeTokenAt: function(text) { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
29 var matchValue = null; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
30 if (typeof(this.match) == 'string') { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
31 if (text.indexOf(this.match) == 0) |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
32 matchValue = this.match; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
33 } else { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
34 // It's a Regular Expression. |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
35 var match = text.match(this.match); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
36 if (match) |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
37 matchValue = match[0]; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
38 } |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
39 if (matchValue) |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
40 return this.extend({value: matchValue}); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
41 return null; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
42 } |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
43 }; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
44 |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
45 Parsing.BinaryOrUnaryOp = function BinaryOrUnaryOp(options) { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
46 Parsing.Symbol.call(this, options); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
47 }; |
0 | 48 |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
49 Parsing.BinaryOrUnaryOp.prototype = new Parsing.Symbol( |
4
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
50 {nullDenotation: function(parser) { |
5
f66ec534e75a
renamed BinaryOperator to BinaryOp, UnaryOperator to UnaryOp.
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
51 var unaryOp = this.extend(Parsing.UnaryOp.prototype); |
4
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
52 return unaryOp.nullDenotation(parser); |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
53 }, |
4
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
54 leftDenotation: function(parser, left) { |
5
f66ec534e75a
renamed BinaryOperator to BinaryOp, UnaryOperator to UnaryOp.
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
55 var binaryOp = this.extend(Parsing.BinaryOp.prototype); |
4
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
56 return binaryOp.leftDenotation(parser, left); |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
57 } |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
58 }); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
59 |
5
f66ec534e75a
renamed BinaryOperator to BinaryOp, UnaryOperator to UnaryOp.
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
60 Parsing.UnaryOp = function UnaryOp(options) { |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
61 Parsing.Symbol.call(this, options); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
62 }; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
63 |
5
f66ec534e75a
renamed BinaryOperator to BinaryOp, UnaryOperator to UnaryOp.
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
64 Parsing.UnaryOp.prototype = new Parsing.Symbol( |
4
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
65 {nullDenotation: function(parser) { |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
66 this.arity = "unary"; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
67 this.operand = parser.token; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
68 parser.advance(); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
69 return this; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
70 }, |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
71 toString: function() { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
72 return "(" + this.match + this.operand + ")"; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
73 } |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
74 }); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
75 |
5
f66ec534e75a
renamed BinaryOperator to BinaryOp, UnaryOperator to UnaryOp.
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
76 Parsing.BinaryOp = function BinaryOp(options) { |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
77 Parsing.Symbol.call(this, options); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
78 }; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
79 |
5
f66ec534e75a
renamed BinaryOperator to BinaryOp, UnaryOperator to UnaryOp.
Atul Varma <varmaa@toolness.com>
parents:
4
diff
changeset
|
80 Parsing.BinaryOp.prototype = new Parsing.Symbol( |
4
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
81 {leftDenotation: function(parser, left) { |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
82 this.arity = "binary"; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
83 this.leftOperand = left; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
84 this.rightOperand = parser.expression(this.leftBindingPower); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
85 return this; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
86 }, |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
87 toString: function() { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
88 return ("(" + this.leftOperand + " " + this.match + " " + |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
89 this.rightOperand + ")"); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
90 } |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
91 }); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
92 |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
93 Parsing.tokenize = function tokenize(options) { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
94 var lexicon = options.lexicon; |
0 | 95 var text = options.text; |
96 | |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
97 var tokenFound; |
0 | 98 var tokens = []; |
99 var lineNo = 0; | |
100 var charNo = 0; | |
101 | |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
102 while (text) { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
103 tokenFound = false; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
104 for (var i = 0; i < lexicon.length && !tokenFound; i++) { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
105 var symbol = lexicon[i]; |
2 | 106 |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
107 var matchedToken = symbol.makeTokenAt(text); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
108 if (matchedToken) { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
109 tokenFound = true; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
110 if (!matchedToken.ignore) { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
111 matchedToken.lineNo = lineNo; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
112 matchedToken.charNo = charNo; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
113 tokens.push(matchedToken); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
114 } |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
115 var matchedValue = matchedToken.value; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
116 text = text.slice(matchedValue.length); |
2 | 117 |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
118 // Increment the current line and character number. |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
119 var nextNewline; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
120 while ((nextNewline = matchedValue.indexOf('\n')) != -1) { |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
121 lineNo += 1; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
122 charNo = 0; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
123 matchedValue = matchedValue.slice(nextNewline + 1); |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
124 } |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
125 charNo += matchedValue.length; |
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
126 } |
0 | 127 } |
2 | 128 |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
129 if (!tokenFound) |
0 | 130 throw new Error("I have no idea what this is: " + text); |
131 } | |
132 | |
133 return tokens; | |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
134 }; |
0 | 135 |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
136 Parsing.Parser = function Parser(tokens) { |
1 | 137 var self = this; |
138 | |
8
0c62f0d3ddf7
parser now ensures that it's done when it thinks it is
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
139 tokens = tokens.slice(); |
0c62f0d3ddf7
parser now ensures that it's done when it thinks it is
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
140 |
0c62f0d3ddf7
parser now ensures that it's done when it thinks it is
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
141 tokens.push(new Parsing.Symbol({name: "end of input"})); |
0c62f0d3ddf7
parser now ensures that it's done when it thinks it is
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
142 |
1 | 143 tokens.reverse(); |
144 | |
7
e758b89c7c92
added support for parentheses
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
145 this.advance = function advance(expectedToken) { |
e758b89c7c92
added support for parentheses
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
146 if (expectedToken && self.token.name != expectedToken) |
e758b89c7c92
added support for parentheses
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
147 throw new Error("Expected " + expectedToken + " but found " + |
e758b89c7c92
added support for parentheses
Atul Varma <varmaa@toolness.com>
parents:
6
diff
changeset
|
148 self.token.name); |
1 | 149 self.token = tokens.pop(); |
150 }; | |
151 | |
152 this.expression = function expression(rightBindingPower) { | |
153 var leftToken = self.token; | |
154 self.advance(); | |
4
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
155 var leftValue = leftToken.nullDenotation(self); |
1 | 156 while (rightBindingPower < self.token.leftBindingPower) { |
157 leftToken = self.token; | |
158 self.advance(); | |
4
559378a3ec26
renamed computeSelf and computeLeft to nullDenotation and leftDenotation.
Atul Varma <varmaa@toolness.com>
parents:
3
diff
changeset
|
159 leftValue = leftToken.leftDenotation(self, leftValue); |
1 | 160 } |
161 return leftValue; | |
162 }; | |
163 | |
164 this.parse = function parse() { | |
165 this.advance(); | |
8
0c62f0d3ddf7
parser now ensures that it's done when it thinks it is
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
166 var value = this.expression(0); |
0c62f0d3ddf7
parser now ensures that it's done when it thinks it is
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
167 this.advance("end of input"); |
0c62f0d3ddf7
parser now ensures that it's done when it thinks it is
Atul Varma <varmaa@toolness.com>
parents:
7
diff
changeset
|
168 return value; |
1 | 169 }; |
3
f174153281a9
massive refactoring/almost-complete rewrite.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
170 }; |