spider-src 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +74 -0
- data/README.md +37 -0
- data/Rakefile +25 -0
- data/lib/spider-src/support/spider/.eslintrc +17 -0
- data/lib/spider-src/support/spider/.npmignore +9 -0
- data/lib/spider-src/support/spider/.travis.yml +7 -0
- data/lib/spider-src/support/spider/.yo-rc.json +3 -0
- data/lib/spider-src/support/spider/CHANGELOG.md +64 -0
- data/lib/spider-src/support/spider/Gruntfile.js +97 -0
- data/lib/spider-src/support/spider/Gruntfile.spider +93 -0
- data/lib/spider-src/support/spider/LICENSE +201 -0
- data/lib/spider-src/support/spider/README.md +50 -0
- data/lib/spider-src/support/spider/cli.js +119 -0
- data/lib/spider-src/support/spider/lib/ast/CaseClause.js +179 -0
- data/lib/spider-src/support/spider/lib/ast/CatchClause.js +26 -0
- data/lib/spider-src/support/spider/lib/ast/ExportBatchSpecifier.js +19 -0
- data/lib/spider-src/support/spider/lib/ast/ExportSpecifier.js +33 -0
- data/lib/spider-src/support/spider/lib/ast/ImportDefaultSpecifier.js +23 -0
- data/lib/spider-src/support/spider/lib/ast/ImportNamespaceSpecifier.js +23 -0
- data/lib/spider-src/support/spider/lib/ast/ImportSpecifier.js +40 -0
- data/lib/spider-src/support/spider/lib/ast/Node.js +93 -0
- data/lib/spider-src/support/spider/lib/ast/Parameter.js +229 -0
- data/lib/spider-src/support/spider/lib/ast/Program.js +58 -0
- data/lib/spider-src/support/spider/lib/ast/Property.js +32 -0
- data/lib/spider-src/support/spider/lib/ast/Range.js +257 -0
- data/lib/spider-src/support/spider/lib/ast/VariableDeclarator.js +29 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ArrayExpression.js +41 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ArrayPattern.js +45 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/AssignmentExpression.js +29 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/BinaryExpression.js +104 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/CallExpression.js +139 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ConditionalExpression.js +31 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/CurryCallExpression.js +102 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ExistentialExpression.js +83 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ForInExpression.js +116 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/FunctionExpression.js +157 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/InExpression.js +99 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/LogicalExpression.js +50 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/MemberExpression.js +43 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/NewExpression.js +46 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/NullCheckCallExpression.js +132 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/NullCoalescingExpression.js +114 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/NullPropagatingExpression.js +161 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ObjectExpression.js +39 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ObjectPattern.js +49 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/RangeMemberExpression.js +157 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/SplatExpression.js +48 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/SuperExpression.js +170 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/ThisExpression.js +22 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/UnaryExpression.js +147 -0
- data/lib/spider-src/support/spider/lib/ast/expressions/UpdateExpression.js +26 -0
- data/lib/spider-src/support/spider/lib/ast/literals/BooleanLiteral.js +24 -0
- data/lib/spider-src/support/spider/lib/ast/literals/Identifier.js +60 -0
- data/lib/spider-src/support/spider/lib/ast/literals/NullLiteral.js +24 -0
- data/lib/spider-src/support/spider/lib/ast/literals/NumberLiteral.js +24 -0
- data/lib/spider-src/support/spider/lib/ast/literals/RegularExpressionLiteral.js +25 -0
- data/lib/spider-src/support/spider/lib/ast/literals/StringLiteral.js +90 -0
- data/lib/spider-src/support/spider/lib/ast/literals/UndefinedLiteral.js +30 -0
- data/lib/spider-src/support/spider/lib/ast/statements/BlockStatement.js +47 -0
- data/lib/spider-src/support/spider/lib/ast/statements/BreakStatement.js +19 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ContinueStatement.js +19 -0
- data/lib/spider-src/support/spider/lib/ast/statements/DebuggerStatement.js +19 -0
- data/lib/spider-src/support/spider/lib/ast/statements/DoWhileStatement.js +25 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ExportDeclarationStatement.js +51 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ExpressionStatement.js +22 -0
- data/lib/spider-src/support/spider/lib/ast/statements/FallthroughStatement.js +74 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ForInStatement.js +79 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ForOfStatement.js +98 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ForStatement.js +43 -0
- data/lib/spider-src/support/spider/lib/ast/statements/FunctionDeclarationStatement.js +104 -0
- data/lib/spider-src/support/spider/lib/ast/statements/GoStatement.js +41 -0
- data/lib/spider-src/support/spider/lib/ast/statements/IfStatement.js +32 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ImportDeclarationStatement.js +40 -0
- data/lib/spider-src/support/spider/lib/ast/statements/PushStatement.js +37 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ReturnStatement.js +26 -0
- data/lib/spider-src/support/spider/lib/ast/statements/SwitchStatement.js +159 -0
- data/lib/spider-src/support/spider/lib/ast/statements/ThrowStatement.js +22 -0
- data/lib/spider-src/support/spider/lib/ast/statements/TryStatement.js +36 -0
- data/lib/spider-src/support/spider/lib/ast/statements/UntilStatement.js +31 -0
- data/lib/spider-src/support/spider/lib/ast/statements/UseStatement.js +49 -0
- data/lib/spider-src/support/spider/lib/ast/statements/VariableDeclarationStatement.js +36 -0
- data/lib/spider-src/support/spider/lib/ast/statements/WhileStatement.js +25 -0
- data/lib/spider-src/support/spider/lib/ast.js +16 -0
- data/lib/spider-src/support/spider/lib/parser.js +14878 -0
- data/lib/spider-src/support/spider/lib/spider.js +217 -0
- data/lib/spider-src/support/spider/package.json +61 -0
- data/lib/spider-src/support/spider/spider-script.js +6 -0
- data/lib/spider-src/support/spider/src/ast/CaseClause.spider +179 -0
- data/lib/spider-src/support/spider/src/ast/CatchClause.spider +30 -0
- data/lib/spider-src/support/spider/src/ast/ExportBatchSpecifier.spider +19 -0
- data/lib/spider-src/support/spider/src/ast/ExportSpecifier.spider +37 -0
- data/lib/spider-src/support/spider/src/ast/ImportDefaultSpecifier.spider +25 -0
- data/lib/spider-src/support/spider/src/ast/ImportNamespaceSpecifier.spider +25 -0
- data/lib/spider-src/support/spider/src/ast/ImportSpecifier.spider +44 -0
- data/lib/spider-src/support/spider/src/ast/Node.spider +104 -0
- data/lib/spider-src/support/spider/src/ast/Parameter.spider +233 -0
- data/lib/spider-src/support/spider/src/ast/Program.spider +109 -0
- data/lib/spider-src/support/spider/src/ast/Property.spider +36 -0
- data/lib/spider-src/support/spider/src/ast/Range.spider +291 -0
- data/lib/spider-src/support/spider/src/ast/VariableDeclarator.spider +33 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ArrayExpression.spider +32 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ArrayPattern.spider +37 -0
- data/lib/spider-src/support/spider/src/ast/expressions/AssignmentExpression.spider +34 -0
- data/lib/spider-src/support/spider/src/ast/expressions/BinaryExpression.spider +125 -0
- data/lib/spider-src/support/spider/src/ast/expressions/CallExpression.spider +149 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ConditionalExpression.spider +34 -0
- data/lib/spider-src/support/spider/src/ast/expressions/CurryCallExpression.spider +109 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ExistentialExpression.spider +102 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ForInExpression.spider +140 -0
- data/lib/spider-src/support/spider/src/ast/expressions/FunctionExpression.spider +183 -0
- data/lib/spider-src/support/spider/src/ast/expressions/InExpression.spider +114 -0
- data/lib/spider-src/support/spider/src/ast/expressions/LogicalExpression.spider +62 -0
- data/lib/spider-src/support/spider/src/ast/expressions/MemberExpression.spider +57 -0
- data/lib/spider-src/support/spider/src/ast/expressions/NewExpression.spider +40 -0
- data/lib/spider-src/support/spider/src/ast/expressions/NullCheckCallExpression.spider +151 -0
- data/lib/spider-src/support/spider/src/ast/expressions/NullCoalescingExpression.spider +151 -0
- data/lib/spider-src/support/spider/src/ast/expressions/NullPropagatingExpression.spider +190 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ObjectExpression.spider +30 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ObjectPattern.spider +42 -0
- data/lib/spider-src/support/spider/src/ast/expressions/RangeMemberExpression.spider +179 -0
- data/lib/spider-src/support/spider/src/ast/expressions/SplatExpression.spider +49 -0
- data/lib/spider-src/support/spider/src/ast/expressions/SuperExpression.spider +235 -0
- data/lib/spider-src/support/spider/src/ast/expressions/ThisExpression.spider +21 -0
- data/lib/spider-src/support/spider/src/ast/expressions/UnaryExpression.spider +158 -0
- data/lib/spider-src/support/spider/src/ast/expressions/UpdateExpression.spider +28 -0
- data/lib/spider-src/support/spider/src/ast/literals/BooleanLiteral.spider +23 -0
- data/lib/spider-src/support/spider/src/ast/literals/Identifier.spider +68 -0
- data/lib/spider-src/support/spider/src/ast/literals/NullLiteral.spider +23 -0
- data/lib/spider-src/support/spider/src/ast/literals/NumberLiteral.spider +23 -0
- data/lib/spider-src/support/spider/src/ast/literals/RegularExpressionLiteral.spider +24 -0
- data/lib/spider-src/support/spider/src/ast/literals/StringLiteral.spider +91 -0
- data/lib/spider-src/support/spider/src/ast/literals/UndefinedLiteral.spider +30 -0
- data/lib/spider-src/support/spider/src/ast/statements/BlockStatement.spider +45 -0
- data/lib/spider-src/support/spider/src/ast/statements/BreakStatement.spider +19 -0
- data/lib/spider-src/support/spider/src/ast/statements/ContinueStatement.spider +19 -0
- data/lib/spider-src/support/spider/src/ast/statements/DebuggerStatement.spider +19 -0
- data/lib/spider-src/support/spider/src/ast/statements/DoWhileStatement.spider +28 -0
- data/lib/spider-src/support/spider/src/ast/statements/ExportDeclarationStatement.spider +46 -0
- data/lib/spider-src/support/spider/src/ast/statements/ExpressionStatement.spider +22 -0
- data/lib/spider-src/support/spider/src/ast/statements/FallthroughStatement.spider +85 -0
- data/lib/spider-src/support/spider/src/ast/statements/ForInStatement.spider +92 -0
- data/lib/spider-src/support/spider/src/ast/statements/ForOfStatement.spider +117 -0
- data/lib/spider-src/support/spider/src/ast/statements/ForStatement.spider +51 -0
- data/lib/spider-src/support/spider/src/ast/statements/FunctionDeclarationStatement.spider +115 -0
- data/lib/spider-src/support/spider/src/ast/statements/GoStatement.spider +44 -0
- data/lib/spider-src/support/spider/src/ast/statements/IfStatement.spider +38 -0
- data/lib/spider-src/support/spider/src/ast/statements/ImportDeclarationStatement.spider +33 -0
- data/lib/spider-src/support/spider/src/ast/statements/PushStatement.spider +40 -0
- data/lib/spider-src/support/spider/src/ast/statements/ReturnStatement.spider +28 -0
- data/lib/spider-src/support/spider/src/ast/statements/SwitchStatement.spider +161 -0
- data/lib/spider-src/support/spider/src/ast/statements/ThrowStatement.spider +23 -0
- data/lib/spider-src/support/spider/src/ast/statements/TryStatement.spider +42 -0
- data/lib/spider-src/support/spider/src/ast/statements/UntilStatement.spider +36 -0
- data/lib/spider-src/support/spider/src/ast/statements/UseStatement.spider +62 -0
- data/lib/spider-src/support/spider/src/ast/statements/VariableDeclarationStatement.spider +34 -0
- data/lib/spider-src/support/spider/src/ast/statements/WhileStatement.spider +28 -0
- data/lib/spider-src/support/spider/src/ast.spider +80 -0
- data/lib/spider-src/support/spider/src/spider.pegjs +1434 -0
- data/lib/spider-src/support/spider/src/spider.spider +276 -0
- data/lib/spider-src/support/spider/test/spider_test.js +1787 -0
- data/lib/spider-src/version.rb +5 -0
- data/lib/spider-src.rb +37 -0
- data/spider-src.gemspec +24 -0
- data/test/test_spider_src.rb +33 -0
- metadata +225 -0
|
@@ -0,0 +1,1434 @@
|
|
|
1
|
+
{
|
|
2
|
+
var ast = module.require('./ast');
|
|
3
|
+
|
|
4
|
+
function filledArray(count, value) {
|
|
5
|
+
var result = new Array(count), i;
|
|
6
|
+
|
|
7
|
+
for (i = 0; i < count; i++) {
|
|
8
|
+
result[i] = value;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function extractOptional(optional, index) {
|
|
15
|
+
return optional ? optional[index] : null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function extractList(list, index) {
|
|
19
|
+
var result = new Array(list.length), i;
|
|
20
|
+
|
|
21
|
+
for (i = 0; i < list.length; i++) {
|
|
22
|
+
result[i] = list[i][index];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function buildList(first, rest, index) {
|
|
29
|
+
return [first].concat(extractList(rest, index));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function buildTree(first, rest, builder) {
|
|
33
|
+
var result = first, i;
|
|
34
|
+
|
|
35
|
+
for (i = 0; i < rest.length; i++) {
|
|
36
|
+
result = builder(result, rest[i]);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function buildBinaryExpression(first, rest) {
|
|
43
|
+
return buildTree(first, rest, function(result, element) {
|
|
44
|
+
return insertLocationData(new ast.BinaryExpression(result, element[1], element[3]), text(), line(), column());
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function buildLogicalExpression(first, rest) {
|
|
49
|
+
return buildTree(first, rest, function(result, element) {
|
|
50
|
+
return insertLocationData(new ast.LogicalExpression(result, element[1], element[3]), text(), line(), column());
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function buildNullCoalescingExpression(first, rest) {
|
|
55
|
+
return buildTree(first, rest, function(result, element) {
|
|
56
|
+
return insertLocationData(new ast.NullCoalescingExpression(result, element[3]), text(), line(), column());
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function optionalList(value) {
|
|
61
|
+
return value !== null ? value : [];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function insertLocationData(node, text, line, column) {
|
|
65
|
+
var lines = text.split("\n");
|
|
66
|
+
node.loc = {
|
|
67
|
+
"start": {
|
|
68
|
+
"line": line,
|
|
69
|
+
"column": column - 1
|
|
70
|
+
},
|
|
71
|
+
"end": {
|
|
72
|
+
"line": line + lines.length - 1,
|
|
73
|
+
"column": (lines.length === 1 ? (column - 1) : 0) +
|
|
74
|
+
lines[lines.length - 1].length
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
return node;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
Start
|
|
83
|
+
= __ program:Program __ { return program; }
|
|
84
|
+
|
|
85
|
+
/* ----- A.1 Lexical Grammar ----- */
|
|
86
|
+
|
|
87
|
+
SourceCharacter
|
|
88
|
+
= .
|
|
89
|
+
|
|
90
|
+
WhiteSpace "whitespace"
|
|
91
|
+
= "\t"
|
|
92
|
+
/ "\v"
|
|
93
|
+
/ "\f"
|
|
94
|
+
/ " "
|
|
95
|
+
/ "\u00A0"
|
|
96
|
+
/ "\uFEFF"
|
|
97
|
+
/ Zs
|
|
98
|
+
|
|
99
|
+
LineTerminator
|
|
100
|
+
= [\n\r\u2028\u2029]
|
|
101
|
+
|
|
102
|
+
LineTerminatorSequence "end of line"
|
|
103
|
+
= "\n"
|
|
104
|
+
/ "\r\n"
|
|
105
|
+
/ "\r"
|
|
106
|
+
/ "\u2028"
|
|
107
|
+
/ "\u2029"
|
|
108
|
+
|
|
109
|
+
Comment "comment"
|
|
110
|
+
= MultiLineComment
|
|
111
|
+
/ SingleLineComment
|
|
112
|
+
|
|
113
|
+
MultiLineComment
|
|
114
|
+
= "/*" (!"*/" SourceCharacter)* "*/"
|
|
115
|
+
|
|
116
|
+
MultiLineCommentNoLineTerminator
|
|
117
|
+
= "/*" (!("*/" / LineTerminator) SourceCharacter)* "*/"
|
|
118
|
+
|
|
119
|
+
SingleLineComment
|
|
120
|
+
= "//" (!LineTerminator SourceCharacter)*
|
|
121
|
+
|
|
122
|
+
Identifier
|
|
123
|
+
= !ReservedWord name:IdentifierName { return name; }
|
|
124
|
+
|
|
125
|
+
IdentifierName "identifier"
|
|
126
|
+
= first:IdentifierStart rest:IdentifierPart* {
|
|
127
|
+
return insertLocationData(new ast.Identifier(first + rest.join("")), text(), line(), column());
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
IdentifierStart
|
|
131
|
+
= UnicodeLetter
|
|
132
|
+
/ "$"
|
|
133
|
+
/ "_"
|
|
134
|
+
/ "\\" sequence:UnicodeEscapeSequence { return sequence; }
|
|
135
|
+
|
|
136
|
+
IdentifierPart
|
|
137
|
+
= IdentifierStart
|
|
138
|
+
/ UnicodeCombiningMark
|
|
139
|
+
/ UnicodeDigit
|
|
140
|
+
/ UnicodeConnectorPunctuation
|
|
141
|
+
/ "\u200C"
|
|
142
|
+
/ "\u200D"
|
|
143
|
+
|
|
144
|
+
UnicodeLetter
|
|
145
|
+
= Lu
|
|
146
|
+
/ Ll
|
|
147
|
+
/ Lt
|
|
148
|
+
/ Lm
|
|
149
|
+
/ Lo
|
|
150
|
+
/ Nl
|
|
151
|
+
|
|
152
|
+
UnicodeCombiningMark
|
|
153
|
+
= Mn
|
|
154
|
+
/ Mc
|
|
155
|
+
|
|
156
|
+
UnicodeDigit
|
|
157
|
+
= Nd
|
|
158
|
+
|
|
159
|
+
UnicodeConnectorPunctuation
|
|
160
|
+
= Pc
|
|
161
|
+
|
|
162
|
+
ReservedWord
|
|
163
|
+
= Keyword
|
|
164
|
+
/ NullLiteral
|
|
165
|
+
/ BooleanLiteral
|
|
166
|
+
|
|
167
|
+
Keyword
|
|
168
|
+
= AndToken
|
|
169
|
+
/ OrToken
|
|
170
|
+
/ ReturnToken
|
|
171
|
+
/ VarToken
|
|
172
|
+
/ IfToken
|
|
173
|
+
/ ElseToken
|
|
174
|
+
/ ForToken
|
|
175
|
+
/ FnToken
|
|
176
|
+
/ NewToken
|
|
177
|
+
/ UseToken
|
|
178
|
+
/ ThisToken
|
|
179
|
+
/ SuperToken
|
|
180
|
+
/ ThrowToken
|
|
181
|
+
/ BreakToken
|
|
182
|
+
/ ContinueToken
|
|
183
|
+
/ DebuggerToken
|
|
184
|
+
/ WhileToken
|
|
185
|
+
/ UntilToken
|
|
186
|
+
/ TypeofToken
|
|
187
|
+
/ InToken
|
|
188
|
+
/ OfToken
|
|
189
|
+
/ TryToken
|
|
190
|
+
/ CatchToken
|
|
191
|
+
/ FinallyToken
|
|
192
|
+
/ InstanceofToken
|
|
193
|
+
/ SwitchToken
|
|
194
|
+
/ CaseToken
|
|
195
|
+
/ DefaultToken
|
|
196
|
+
/ FallthroughToken
|
|
197
|
+
/ NotToken
|
|
198
|
+
/ ImportToken
|
|
199
|
+
/ FromToken
|
|
200
|
+
/ AsToken
|
|
201
|
+
/ ExportToken
|
|
202
|
+
/ DeleteToken
|
|
203
|
+
/ AsyncToken
|
|
204
|
+
/ AwaitToken
|
|
205
|
+
/ GoToken
|
|
206
|
+
/ NullToken
|
|
207
|
+
/ UndefinedToken
|
|
208
|
+
|
|
209
|
+
Literal
|
|
210
|
+
= NullLiteral
|
|
211
|
+
/ UndefinedLiteral
|
|
212
|
+
/ BooleanLiteral
|
|
213
|
+
/ NumericLiteral
|
|
214
|
+
/ StringLiteral
|
|
215
|
+
/ RegularExpressionLiteral
|
|
216
|
+
|
|
217
|
+
NullLiteral
|
|
218
|
+
= NullToken { return insertLocationData(new ast.NullLiteral(), text(), line(), column()); }
|
|
219
|
+
|
|
220
|
+
UndefinedLiteral
|
|
221
|
+
= UndefinedToken { return insertLocationData(new ast.UndefinedLiteral(), text(), line(), column()); }
|
|
222
|
+
|
|
223
|
+
BooleanLiteral
|
|
224
|
+
= TrueToken { return insertLocationData(new ast.BooleanLiteral("true"), text(), line(), column()); }
|
|
225
|
+
/ FalseToken { return insertLocationData(new ast.BooleanLiteral("false"), text(), line(), column()); }
|
|
226
|
+
|
|
227
|
+
NumericLiteral "number"
|
|
228
|
+
= literal:HexIntegerLiteral !(IdentifierStart / DecimalDigit) {
|
|
229
|
+
return literal;
|
|
230
|
+
}
|
|
231
|
+
/ literal:DecimalLiteral !(IdentifierStart / DecimalDigit) {
|
|
232
|
+
return literal;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
DecimalLiteral
|
|
236
|
+
= DecimalIntegerLiteral "." !"." DecimalDigit* ExponentPart? {
|
|
237
|
+
return insertLocationData(new ast.NumberLiteral(text()), text(), line(), column());
|
|
238
|
+
}
|
|
239
|
+
/ "." !"." DecimalDigit+ ExponentPart? {
|
|
240
|
+
return insertLocationData(new ast.NumberLiteral(text()), text(), line(), column());
|
|
241
|
+
}
|
|
242
|
+
/ DecimalIntegerLiteral ExponentPart? {
|
|
243
|
+
return insertLocationData(new ast.NumberLiteral(text()), text(), line(), column());
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
DecimalIntegerLiteral
|
|
247
|
+
= "0"
|
|
248
|
+
/ NonZeroDigit DecimalDigit*
|
|
249
|
+
|
|
250
|
+
DecimalDigit
|
|
251
|
+
= [0-9]
|
|
252
|
+
|
|
253
|
+
NonZeroDigit
|
|
254
|
+
= [1-9]
|
|
255
|
+
|
|
256
|
+
ExponentPart
|
|
257
|
+
= ExponentIndicator SignedInteger
|
|
258
|
+
|
|
259
|
+
ExponentIndicator
|
|
260
|
+
= "e"i
|
|
261
|
+
|
|
262
|
+
SignedInteger
|
|
263
|
+
= [+-]? DecimalDigit+
|
|
264
|
+
|
|
265
|
+
HexIntegerLiteral
|
|
266
|
+
= "0x"i digits:$HexDigit+ {
|
|
267
|
+
return insertLocationData(new ast.NumberLiteral(text(), 16), text(), line(), column());
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
HexDigit
|
|
271
|
+
= [0-9a-f]i
|
|
272
|
+
|
|
273
|
+
StringLiteral "string"
|
|
274
|
+
= '"' chars:DoubleStringCharacter* '"' {
|
|
275
|
+
return insertLocationData(new ast.StringLiteral(chars, column()), text(), line(), column());
|
|
276
|
+
}
|
|
277
|
+
/ "'" chars:SingleStringCharacter* "'" {
|
|
278
|
+
return insertLocationData(new ast.StringLiteral(chars, column()), text(), line(), column());
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
DoubleStringCharacter
|
|
282
|
+
= !('"' / "\\" / LineTerminator) SourceCharacter { return text(); }
|
|
283
|
+
/ "\\" sequence:EscapeSequence { return sequence; }
|
|
284
|
+
/ LineContinuation
|
|
285
|
+
/ LineTerminator __ { return new ast.StringLiteral.NewLine(text()); }
|
|
286
|
+
|
|
287
|
+
SingleStringCharacter
|
|
288
|
+
= !("'" / "\\" / LineTerminator) SourceCharacter { return text(); }
|
|
289
|
+
/ "\\" sequence:EscapeSequence { return sequence; }
|
|
290
|
+
/ LineContinuation
|
|
291
|
+
/ LineTerminator __ { return new ast.StringLiteral.NewLine(text()); }
|
|
292
|
+
|
|
293
|
+
LineContinuation
|
|
294
|
+
= "\\" LineTerminatorSequence { return ""; }
|
|
295
|
+
|
|
296
|
+
EscapeSequence
|
|
297
|
+
= ExpressionSequence
|
|
298
|
+
/ CharacterEscapeSequence
|
|
299
|
+
/ "0" !DecimalDigit { return "\0"; }
|
|
300
|
+
/ HexEscapeSequence
|
|
301
|
+
/ UnicodeEscapeSequence
|
|
302
|
+
|
|
303
|
+
CharacterEscapeSequence
|
|
304
|
+
= SingleEscapeCharacter
|
|
305
|
+
/ NonEscapeCharacter
|
|
306
|
+
|
|
307
|
+
SingleEscapeCharacter
|
|
308
|
+
= "'"
|
|
309
|
+
/ '"'
|
|
310
|
+
/ "\\"
|
|
311
|
+
/ "b" { return "\b"; }
|
|
312
|
+
/ "f" { return "\f"; }
|
|
313
|
+
/ "n" { return "\n"; }
|
|
314
|
+
/ "r" { return "\r"; }
|
|
315
|
+
/ "t" { return "\t"; }
|
|
316
|
+
/ "v" { return "\x0B"; }
|
|
317
|
+
|
|
318
|
+
NonEscapeCharacter
|
|
319
|
+
= !(EscapeCharacter / LineTerminator) SourceCharacter { return text(); }
|
|
320
|
+
|
|
321
|
+
EscapeCharacter
|
|
322
|
+
= SingleEscapeCharacter
|
|
323
|
+
/ DecimalDigit
|
|
324
|
+
/ "x"
|
|
325
|
+
/ "u"
|
|
326
|
+
|
|
327
|
+
HexEscapeSequence
|
|
328
|
+
= "x" digits:$(HexDigit HexDigit) {
|
|
329
|
+
return String.fromCharCode(parseInt(digits, 16));
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
UnicodeEscapeSequence
|
|
333
|
+
= "u" digits:$(HexDigit HexDigit HexDigit HexDigit) {
|
|
334
|
+
return String.fromCharCode(parseInt(digits, 16));
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
ExpressionSequence
|
|
338
|
+
= "(" expression:Expression ")" {
|
|
339
|
+
return expression;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
RegularExpressionLiteral "regular expression"
|
|
343
|
+
= "/" pattern:$RegularExpressionBody "/" flags:$RegularExpressionFlags {
|
|
344
|
+
return insertLocationData(new ast.RegularExpressionLiteral(pattern, flags), text(), line(), column());
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
RegularExpressionBody
|
|
348
|
+
= RegularExpressionFirstChar RegularExpressionChar*
|
|
349
|
+
|
|
350
|
+
RegularExpressionFirstChar
|
|
351
|
+
= ![*\\/[] RegularExpressionNonTerminator
|
|
352
|
+
/ RegularExpressionBackslashSequence
|
|
353
|
+
/ RegularExpressionClass
|
|
354
|
+
|
|
355
|
+
RegularExpressionChar
|
|
356
|
+
= ![\\/[] RegularExpressionNonTerminator
|
|
357
|
+
/ RegularExpressionBackslashSequence
|
|
358
|
+
/ RegularExpressionClass
|
|
359
|
+
|
|
360
|
+
RegularExpressionBackslashSequence
|
|
361
|
+
= "\\" RegularExpressionNonTerminator
|
|
362
|
+
|
|
363
|
+
RegularExpressionNonTerminator
|
|
364
|
+
= !LineTerminator SourceCharacter
|
|
365
|
+
|
|
366
|
+
RegularExpressionClass
|
|
367
|
+
= "[" RegularExpressionClassChar* "]"
|
|
368
|
+
|
|
369
|
+
RegularExpressionClassChar
|
|
370
|
+
= ![\]\\] RegularExpressionNonTerminator
|
|
371
|
+
/ RegularExpressionBackslashSequence
|
|
372
|
+
|
|
373
|
+
RegularExpressionFlags
|
|
374
|
+
= IdentifierPart*
|
|
375
|
+
|
|
376
|
+
/*
|
|
377
|
+
* Unicode Character Categories
|
|
378
|
+
*
|
|
379
|
+
* Extracted from the following Unicode Character Database file:
|
|
380
|
+
*
|
|
381
|
+
* http://www.unicode.org/Public/6.3.0/ucd/extracted/DerivedGeneralCategory.txt
|
|
382
|
+
*
|
|
383
|
+
* Unix magic used:
|
|
384
|
+
*
|
|
385
|
+
* grep "; $CATEGORY" DerivedGeneralCategory.txt | # Filter characters
|
|
386
|
+
* cut -f1 -d " " | # Extract code points
|
|
387
|
+
* grep -v '[0-9a-fA-F]\{5\}' | # Exclude non-BMP characters
|
|
388
|
+
* sed -e 's/\.\./-/' | # Adjust formatting
|
|
389
|
+
* sed -e 's/\([0-9a-fA-F]\{4\}\)/\\u\1/g' | # Adjust formatting
|
|
390
|
+
* tr -d '\n' # Join lines
|
|
391
|
+
*
|
|
392
|
+
* ECMA-262 allows using Unicode 3.0 or later, version 6.3.0 was the latest one
|
|
393
|
+
* at the time of writing.
|
|
394
|
+
*
|
|
395
|
+
* Non-BMP characters are completely ignored to avoid surrogate pair handling
|
|
396
|
+
* (detecting surrogate pairs isn't possible with a simple character class and
|
|
397
|
+
* other methods would degrade performance). I don't consider it a big deal as
|
|
398
|
+
* even parsers in JavaScript engines of common browsers seem to ignore them.
|
|
399
|
+
*/
|
|
400
|
+
|
|
401
|
+
// Letter, Lowercase
|
|
402
|
+
Ll = [\u0061-\u007A\u00B5\u00DF-\u00F6\u00F8-\u00FF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0561-\u0587\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7FA\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A]
|
|
403
|
+
|
|
404
|
+
// Letter, Modifier
|
|
405
|
+
Lm = [\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5-\u06E6\u07F4-\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C-\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D-\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA717-\uA71F\uA770\uA788\uA7F8-\uA7F9\uA9CF\uAA70\uAADD\uAAF3-\uAAF4\uFF70\uFF9E-\uFF9F]
|
|
406
|
+
|
|
407
|
+
// Letter, Other
|
|
408
|
+
Lo = [\u00AA\u00BA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0620-\u063F\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0977\u0979-\u097F\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58-\u0C59\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u10FD-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A-\uA62B\uA66E\uA6A0-\uA6E5\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]
|
|
409
|
+
|
|
410
|
+
// Letter, Titlecase
|
|
411
|
+
Lt = [\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC]
|
|
412
|
+
|
|
413
|
+
// Letter, Uppercase
|
|
414
|
+
Lu = [\u0041-\u005A\u00C0-\u00D6\u00D8-\u00DE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA\uFF21-\uFF3A]
|
|
415
|
+
|
|
416
|
+
// Mark, Spacing Combining
|
|
417
|
+
Mc = [\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E-\u094F\u0982-\u0983\u09BE-\u09C0\u09C7-\u09C8\u09CB-\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB-\u0ACC\u0B02-\u0B03\u0B3E\u0B40\u0B47-\u0B48\u0B4B-\u0B4C\u0B57\u0BBE-\u0BBF\u0BC1-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82-\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7-\u0CC8\u0CCA-\u0CCB\u0CD5-\u0CD6\u0D02-\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82-\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2-\u0DF3\u0F3E-\u0F3F\u0F7F\u102B-\u102C\u1031\u1038\u103B-\u103C\u1056-\u1057\u1062-\u1064\u1067-\u106D\u1083-\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7-\u17C8\u1923-\u1926\u1929-\u192B\u1930-\u1931\u1933-\u1938\u19B0-\u19C0\u19C8-\u19C9\u1A19-\u1A1A\u1A55\u1A57\u1A61\u1A63-\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43-\u1B44\u1B82\u1BA1\u1BA6-\u1BA7\u1BAA\u1BAC-\u1BAD\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2-\u1BF3\u1C24-\u1C2B\u1C34-\u1C35\u1CE1\u1CF2-\u1CF3\u302E-\u302F\uA823-\uA824\uA827\uA880-\uA881\uA8B4-\uA8C3\uA952-\uA953\uA983\uA9B4-\uA9B5\uA9BA-\uA9BB\uA9BD-\uA9C0\uAA2F-\uAA30\uAA33-\uAA34\uAA4D\uAA7B\uAAEB\uAAEE-\uAAEF\uAAF5\uABE3-\uABE4\uABE6-\uABE7\uABE9-\uABEA\uABEC]
|
|
418
|
+
|
|
419
|
+
// Mark, Nonspacing
|
|
420
|
+
Mn = [\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u08FE\u0900-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962-\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2-\u09E3\u0A01-\u0A02\u0A3C\u0A41-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A51\u0A70-\u0A71\u0A75\u0A81-\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7-\u0AC8\u0ACD\u0AE2-\u0AE3\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62-\u0B63\u0B82\u0BC0\u0BCD\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C62-\u0C63\u0CBC\u0CBF\u0CC6\u0CCC-\u0CCD\u0CE2-\u0CE3\u0D41-\u0D44\u0D4D\u0D62-\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0F18-\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86-\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039-\u103A\u103D-\u103E\u1058-\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17B4-\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193B\u1A17-\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80-\u1B81\u1BA2-\u1BA5\u1BA8-\u1BA9\u1BAB\u1BE6\u1BE8-\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1DC0-\u1DE6\u1DFC-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099-\u309A\uA66F\uA674-\uA67D\uA69F\uA6F0-\uA6F1\uA802\uA806\uA80B\uA825-\uA826\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uAA29-\uAA2E\uAA31-\uAA32\uAA35-\uAA36\uAA43\uAA4C\uAAB0\uAAB2-\uAAB4\uAAB7-\uAAB8\uAABE-\uAABF\uAAC1\uAAEC-\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE26]
|
|
421
|
+
|
|
422
|
+
// Number, Decimal Digit
|
|
423
|
+
Nd = [\u0030-\u0039\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19]
|
|
424
|
+
|
|
425
|
+
// Number, Letter
|
|
426
|
+
Nl = [\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF]
|
|
427
|
+
|
|
428
|
+
// Punctuation, Connector
|
|
429
|
+
Pc = [\u005F\u203F-\u2040\u2054\uFE33-\uFE34\uFE4D-\uFE4F\uFF3F]
|
|
430
|
+
|
|
431
|
+
// Separator, Space
|
|
432
|
+
Zs = [\u0020\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]
|
|
433
|
+
|
|
434
|
+
/* Tokens */
|
|
435
|
+
|
|
436
|
+
AndToken = "and" !IdentifierPart
|
|
437
|
+
OrToken = "or" !IdentifierPart
|
|
438
|
+
ReturnToken = "return" !IdentifierPart
|
|
439
|
+
FnToken = "fn" !IdentifierPart
|
|
440
|
+
VarToken = "var" !IdentifierPart
|
|
441
|
+
IfToken = "if" !IdentifierPart
|
|
442
|
+
ElseToken = "else" !IdentifierPart
|
|
443
|
+
ForToken = "for" !IdentifierPart
|
|
444
|
+
TrueToken = "true" !IdentifierPart
|
|
445
|
+
FalseToken = "false" !IdentifierPart
|
|
446
|
+
NullToken = "null" !IdentifierPart
|
|
447
|
+
NewToken = "new" !IdentifierPart
|
|
448
|
+
UseToken = "use" !IdentifierPart
|
|
449
|
+
ThisToken = "this" !IdentifierPart
|
|
450
|
+
SuperToken = "super" !IdentifierPart
|
|
451
|
+
ThrowToken = "throw" !IdentifierPart
|
|
452
|
+
BreakToken = "break" !IdentifierPart
|
|
453
|
+
ContinueToken = "continue" !IdentifierPart
|
|
454
|
+
DebuggerToken = "debugger" !IdentifierPart
|
|
455
|
+
WhileToken = "while" !IdentifierPart
|
|
456
|
+
UntilToken = "until" !IdentifierPart
|
|
457
|
+
TypeofToken = "typeof" !IdentifierPart
|
|
458
|
+
InToken = "in" !IdentifierPart
|
|
459
|
+
OfToken = "of" !IdentifierPart
|
|
460
|
+
TryToken = "try" !IdentifierPart
|
|
461
|
+
FinallyToken = "finally" !IdentifierPart
|
|
462
|
+
CatchToken = "catch" !IdentifierPart
|
|
463
|
+
InstanceofToken = "instanceof" !IdentifierPart
|
|
464
|
+
SwitchToken = "switch" !IdentifierPart
|
|
465
|
+
CaseToken = "case" !IdentifierPart
|
|
466
|
+
DefaultToken = "default" !IdentifierPart
|
|
467
|
+
FallthroughToken = "fallthrough" !IdentifierPart
|
|
468
|
+
NotToken = "not" !IdentifierPart
|
|
469
|
+
ImportToken = "import" !IdentifierPart
|
|
470
|
+
FromToken = "from" !IdentifierPart
|
|
471
|
+
AsToken = "as" !IdentifierPart
|
|
472
|
+
ExportToken = "export" !IdentifierPart
|
|
473
|
+
DeleteToken = "delete" !IdentifierPart
|
|
474
|
+
DoToken = "do" !IdentifierPart
|
|
475
|
+
AsyncToken = "async" !IdentifierPart
|
|
476
|
+
AwaitToken = "await" !IdentifierPart
|
|
477
|
+
GoToken = "go" !IdentifierPart
|
|
478
|
+
UndefinedToken = "undefined" !IdentifierPart
|
|
479
|
+
|
|
480
|
+
__
|
|
481
|
+
= (WhiteSpace / LineTerminatorSequence / Comment)*
|
|
482
|
+
|
|
483
|
+
_
|
|
484
|
+
= (WhiteSpace / MultiLineCommentNoLineTerminator)*
|
|
485
|
+
|
|
486
|
+
EOS
|
|
487
|
+
= __ ";"
|
|
488
|
+
|
|
489
|
+
EOF
|
|
490
|
+
= !.
|
|
491
|
+
|
|
492
|
+
Program
|
|
493
|
+
= body:StatementList? {
|
|
494
|
+
return insertLocationData(new ast.Program(optionalList(body)), text(), line(), column());
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
StatementList
|
|
498
|
+
= first:Statement rest:(__ Statement)* {
|
|
499
|
+
return buildList(first, rest, 1);
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
Statement
|
|
503
|
+
= Block
|
|
504
|
+
/ VariableStatement
|
|
505
|
+
/ FunctionDeclaration
|
|
506
|
+
/ IfStatement
|
|
507
|
+
/ PushStatement
|
|
508
|
+
/ ExpressionStatement
|
|
509
|
+
/ ReturnStatement
|
|
510
|
+
/ ForStatement
|
|
511
|
+
/ UseStatement
|
|
512
|
+
/ ThrowStatement
|
|
513
|
+
/ TryStatement
|
|
514
|
+
/ BreakStatement
|
|
515
|
+
/ ContinueStatement
|
|
516
|
+
/ DebuggerStatement
|
|
517
|
+
/ WhileStatement
|
|
518
|
+
/ UntilStatement
|
|
519
|
+
/ SwitchStatement
|
|
520
|
+
/ FallthroughStatement
|
|
521
|
+
/ ImportDeclarationStatement
|
|
522
|
+
/ ExportDeclarationStatement
|
|
523
|
+
/ DoWhileStatement
|
|
524
|
+
/ GoStatement
|
|
525
|
+
|
|
526
|
+
Block
|
|
527
|
+
= "{" __ body:(StatementList __)? "}" {
|
|
528
|
+
return insertLocationData(new ast.BlockStatement(optionalList(extractOptional(body, 0))), text(), line(), column());
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
VariableStatement
|
|
532
|
+
= VarToken __ declarations:VariableDeclarationList EOS {
|
|
533
|
+
return insertLocationData(new ast.VariableDeclarationStatement(declarations), text(), line(), column());
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
VariableDeclarationList
|
|
537
|
+
= first:VariableDeclaration rest:(__ "," __ VariableDeclaration)* {
|
|
538
|
+
return buildList(first, rest, 3);
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
VariableDeclaration
|
|
542
|
+
= id:Identifier init:(__ Initialiser)? {
|
|
543
|
+
return insertLocationData(new ast.VariableDeclarator(id, extractOptional(init, 1)), text(), line(), column());
|
|
544
|
+
}
|
|
545
|
+
/ id:Pattern init:(__ Initialiser)? {
|
|
546
|
+
return insertLocationData(new ast.VariableDeclarator(id, extractOptional(init, 1)), text(), line(), column());
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
Initialiser
|
|
550
|
+
= "=" !"=" __ expression:AssignmentExpression { return expression; }
|
|
551
|
+
|
|
552
|
+
FunctionDeclaration
|
|
553
|
+
= AsyncToken __ FnToken __ id:Identifier __
|
|
554
|
+
"(" __ params:(FormalParameterList __)? ")" __
|
|
555
|
+
inheritsFrom:InheritsFrom?
|
|
556
|
+
__ body:Block __
|
|
557
|
+
{
|
|
558
|
+
return insertLocationData(
|
|
559
|
+
new ast.VariableDeclarationStatement(
|
|
560
|
+
[new ast.VariableDeclarator(id,
|
|
561
|
+
new ast.UnaryExpression("async",
|
|
562
|
+
new ast.FunctionExpression(
|
|
563
|
+
null,
|
|
564
|
+
optionalList(extractOptional(params, 0)),
|
|
565
|
+
body,
|
|
566
|
+
inheritsFrom
|
|
567
|
+
)
|
|
568
|
+
)
|
|
569
|
+
)]
|
|
570
|
+
),
|
|
571
|
+
text(), line(), column());
|
|
572
|
+
}
|
|
573
|
+
/ FnToken __ id:Identifier __
|
|
574
|
+
"(" __ params:(FormalParameterList __)? ")" __
|
|
575
|
+
inheritsFrom:InheritsFrom?
|
|
576
|
+
__ body:Block __
|
|
577
|
+
{
|
|
578
|
+
return insertLocationData(
|
|
579
|
+
new ast.FunctionDeclarationStatement(id, optionalList(extractOptional(params, 0)), body, inheritsFrom),
|
|
580
|
+
text(), line(), column());
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
InheritsFrom
|
|
584
|
+
= "extends" __ call:CallExpression __ {
|
|
585
|
+
return call;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
FormalParameterList
|
|
589
|
+
= first:FormalParameter rest:(__ "," __ FormalParameter)* {
|
|
590
|
+
return buildList(first, rest, 3);
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
FormalParameter
|
|
594
|
+
= id:Identifier __ "=" __ defaultValue:Expression {
|
|
595
|
+
return insertLocationData(new ast.Parameter(id, defaultValue, false), text(), line(), column());
|
|
596
|
+
}
|
|
597
|
+
/ id:Identifier __ "..." {
|
|
598
|
+
return insertLocationData(new ast.Parameter(id, null, true), text(), line(), column());
|
|
599
|
+
}
|
|
600
|
+
/ id:Identifier {
|
|
601
|
+
return insertLocationData(new ast.Parameter(id, null, false), text(), line(), column());
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
IfStatement
|
|
605
|
+
= IfToken __ test:Expression __
|
|
606
|
+
consequent:Statement __
|
|
607
|
+
ElseToken __
|
|
608
|
+
alternate:Statement
|
|
609
|
+
{
|
|
610
|
+
return insertLocationData(new ast.IfStatement(test, consequent, alternate), text(), line(), column());
|
|
611
|
+
}
|
|
612
|
+
/ IfToken __ test:Expression __
|
|
613
|
+
consequent:Statement {
|
|
614
|
+
return insertLocationData(new ast.IfStatement(test, consequent, null), text(), line(), column());
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
ReturnStatement
|
|
618
|
+
= ReturnToken EOS {
|
|
619
|
+
return insertLocationData(new ast.ReturnStatement(null), text(), line(), column());
|
|
620
|
+
}
|
|
621
|
+
/ ReturnToken _ argument:Expression EOS {
|
|
622
|
+
return insertLocationData(new ast.ReturnStatement(argument), text(), line(), column());
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
ThrowStatement
|
|
626
|
+
= ThrowToken _ argument:Expression EOS {
|
|
627
|
+
return insertLocationData(new ast.ThrowStatement(argument), text(), line(), column());
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
TryStatement
|
|
631
|
+
= TryToken __ block:Block __ handler:Catch __ finalizer:Finally {
|
|
632
|
+
return insertLocationData(new ast.TryStatement(block, handler, finalizer), text(), line(), column());
|
|
633
|
+
}
|
|
634
|
+
/ TryToken __ block:Block __ handler:Catch {
|
|
635
|
+
return insertLocationData(new ast.TryStatement(block, handler, null), text(), line(), column());
|
|
636
|
+
}
|
|
637
|
+
/ TryToken __ block:Block __ finalizer:Finally {
|
|
638
|
+
return insertLocationData(new ast.TryStatement(block, null, finalizer), text(), line(), column());
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
Catch
|
|
642
|
+
= CatchToken __ param:Identifier __ body:Block {
|
|
643
|
+
return insertLocationData(new ast.CatchClause(param, body), text(), line(), column());
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
Finally
|
|
647
|
+
= FinallyToken __ block:Block { return block; }
|
|
648
|
+
|
|
649
|
+
BreakStatement
|
|
650
|
+
= BreakToken EOS {
|
|
651
|
+
return insertLocationData(new ast.BreakStatement(), text(), line(), column());
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
ContinueStatement
|
|
655
|
+
= ContinueToken EOS {
|
|
656
|
+
return insertLocationData(new ast.ContinueStatement(), text(), line(), column());
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
FallthroughStatement
|
|
660
|
+
= FallthroughToken EOS {
|
|
661
|
+
return insertLocationData(new ast.FallthroughStatement(), text(), line(), column());
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
ImportDeclarationStatement
|
|
665
|
+
= ImportToken __ specifiers:ImportSpecifierList __ FromToken __ source:StringLiteral EOS {
|
|
666
|
+
return insertLocationData(new ast.ImportDeclarationStatement(specifiers, source, "named"), text(), line(), column());
|
|
667
|
+
}
|
|
668
|
+
/ ImportToken __ "*" __ AsToken __ id:Identifier __ FromToken __ source:StringLiteral EOS {
|
|
669
|
+
return insertLocationData(new ast.ImportDeclarationStatement([
|
|
670
|
+
new ast.ImportNamespaceSpecifier(id)
|
|
671
|
+
], source, "named"), text(), line(), column());
|
|
672
|
+
}
|
|
673
|
+
/ ImportToken __ source:StringLiteral __ AsToken __ id:Identifier EOS {
|
|
674
|
+
return insertLocationData(new ast.ImportDeclarationStatement([
|
|
675
|
+
new ast.ImportDefaultSpecifier(id)
|
|
676
|
+
], source, "default"), text(), line(), column());
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
ImportSpecifierList
|
|
680
|
+
= first:ImportSpecifier rest:("," __ ImportSpecifier)* {
|
|
681
|
+
return buildList(first, rest, 2);
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
ImportSpecifier
|
|
685
|
+
= id:Identifier __ AsToken __ alias:Identifier {
|
|
686
|
+
return insertLocationData(new ast.ImportSpecifier(id, alias), text(), line(), column());
|
|
687
|
+
}
|
|
688
|
+
/ id:Identifier {
|
|
689
|
+
return insertLocationData(new ast.ImportSpecifier(id, null), text(), line(), column());
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
ExportDeclarationStatement
|
|
693
|
+
= ExportToken __ specifiers:ExportSpecifierList source:(__ FromToken __ StringLiteral)? EOS {
|
|
694
|
+
return insertLocationData(new ast.ExportDeclarationStatement(specifiers, extractOptional(source, 3), null, false), text(), line(), column());
|
|
695
|
+
}
|
|
696
|
+
/ ExportToken __ "*" __ FromToken __ source:StringLiteral EOS {
|
|
697
|
+
return insertLocationData(new ast.ExportDeclarationStatement([
|
|
698
|
+
new ast.ExportBatchSpecifier()
|
|
699
|
+
], source, null, false), text(), line(), column());
|
|
700
|
+
}
|
|
701
|
+
/ ExportToken __ statement:VariableStatement {
|
|
702
|
+
return insertLocationData(new ast.ExportDeclarationStatement(null, null, statement, false), text(), line(), column());
|
|
703
|
+
}
|
|
704
|
+
/ ExportToken __ statement:FunctionDeclaration {
|
|
705
|
+
return insertLocationData(new ast.ExportDeclarationStatement(null, null, statement, false), text(), line(), column());
|
|
706
|
+
}
|
|
707
|
+
/ ExportToken __ DefaultToken __ expression:Expression EOS {
|
|
708
|
+
return insertLocationData(new ast.ExportDeclarationStatement(null, null, expression, true), text(), line(), column());
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
ExportSpecifierList
|
|
712
|
+
= first:ExportSpecifier rest:("," __ ExportSpecifier)* {
|
|
713
|
+
return buildList(first, rest, 2);
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
ExportSpecifier
|
|
717
|
+
= id:Identifier __ AsToken __ alias:Identifier {
|
|
718
|
+
return insertLocationData(new ast.ExportSpecifier(id, alias), text(), line(), column());
|
|
719
|
+
}
|
|
720
|
+
/ id:Identifier {
|
|
721
|
+
return insertLocationData(new ast.ExportSpecifier(id, null), text(), line(), column());
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
DoWhileStatement
|
|
725
|
+
= DoToken __
|
|
726
|
+
body:Statement __
|
|
727
|
+
WhileToken __ test:Expression EOS {
|
|
728
|
+
return insertLocationData(new ast.DoWhileStatement(test, body), text(), line(), column());
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
PushStatement
|
|
732
|
+
= left:LeftHandSideExpression __ "<-" __ right:AssignmentExpression EOS {
|
|
733
|
+
return insertLocationData(new ast.PushStatement(left, right), text(), line(), column());
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
GoStatement
|
|
737
|
+
= GoToken __ body:Block EOS {
|
|
738
|
+
return insertLocationData(new ast.GoStatement(body), text(), line(), column());
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
DebuggerStatement
|
|
742
|
+
= DebuggerToken EOS {
|
|
743
|
+
return insertLocationData(new ast.DebuggerStatement(), text(), line(), column());
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
WhileStatement
|
|
747
|
+
= WhileToken __ test:Expression __
|
|
748
|
+
body:Statement {
|
|
749
|
+
return insertLocationData(new ast.WhileStatement(test, body), text(), line(), column());
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
UntilStatement
|
|
753
|
+
= UntilToken __ test:Expression __
|
|
754
|
+
body:Statement {
|
|
755
|
+
return insertLocationData(new ast.UntilStatement(test, body), text(), line(), column());
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
SwitchStatement
|
|
759
|
+
= SwitchToken __ discriminant:Expression __ "{" __
|
|
760
|
+
cases:CaseClauseList __
|
|
761
|
+
"}" {
|
|
762
|
+
return insertLocationData(new ast.SwitchStatement(discriminant, cases), text(), line(), column());
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
CaseClauseList
|
|
766
|
+
= first:CaseClause rest:(__ ","? __ CaseClause)* {
|
|
767
|
+
return buildList(first, rest, 3);
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
CaseClause
|
|
771
|
+
= CaseToken __ tests:CaseClauseTestList __ ":" __ body:Statement {
|
|
772
|
+
return insertLocationData(new ast.CaseClause(tests, body), text(), line(), column());
|
|
773
|
+
}
|
|
774
|
+
/ DefaultToken __ ":" __ body:Statement {
|
|
775
|
+
return insertLocationData(new ast.CaseClause(null, body), text(), line(), column());
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
CaseClauseTestList
|
|
779
|
+
= first:CaseClauseTest rest:("," __ CaseClauseTest)* {
|
|
780
|
+
return buildList(first, rest, 2);
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
CaseClauseTest
|
|
784
|
+
= OptionalRange
|
|
785
|
+
/ Expression
|
|
786
|
+
|
|
787
|
+
ForStatement
|
|
788
|
+
= ForToken __
|
|
789
|
+
item:Identifier __
|
|
790
|
+
index:("," __ Identifier)? __
|
|
791
|
+
InToken __ array:Expression __
|
|
792
|
+
body:Statement {
|
|
793
|
+
return insertLocationData(new ast.ForInStatement(
|
|
794
|
+
item,
|
|
795
|
+
extractOptional(index, 2),
|
|
796
|
+
array,
|
|
797
|
+
body
|
|
798
|
+
), text(), line(), column());
|
|
799
|
+
}
|
|
800
|
+
/ ForToken __
|
|
801
|
+
key:Identifier __
|
|
802
|
+
value:("," __ Identifier)? __
|
|
803
|
+
OfToken __ object:Expression __
|
|
804
|
+
body:Statement {
|
|
805
|
+
return insertLocationData(new ast.ForOfStatement(
|
|
806
|
+
key,
|
|
807
|
+
extractOptional(value, 2),
|
|
808
|
+
object,
|
|
809
|
+
body
|
|
810
|
+
), text(), line(), column());
|
|
811
|
+
}
|
|
812
|
+
/ ForToken __
|
|
813
|
+
VarToken __ declarations:VariableDeclarationList __ ";" __
|
|
814
|
+
test:(Expression __)? ";" __
|
|
815
|
+
update:(!("{" __ "}") Expression __)? __
|
|
816
|
+
body:Statement {
|
|
817
|
+
return insertLocationData(new ast.ForStatement(
|
|
818
|
+
new ast.VariableDeclarationStatement(declarations),
|
|
819
|
+
extractOptional(test, 0),
|
|
820
|
+
extractOptional(update, 1),
|
|
821
|
+
body
|
|
822
|
+
), text(), line(), column());
|
|
823
|
+
}
|
|
824
|
+
/ ForToken __
|
|
825
|
+
init:(Expression __)? ";" __
|
|
826
|
+
test:(Expression __)? ";" __
|
|
827
|
+
update:(!("{" __ "}") Expression __)? __
|
|
828
|
+
body:Statement {
|
|
829
|
+
return insertLocationData(new ast.ForStatement(
|
|
830
|
+
extractOptional(init, 0),
|
|
831
|
+
extractOptional(test, 0),
|
|
832
|
+
extractOptional(update, 1),
|
|
833
|
+
body
|
|
834
|
+
), text(), line(), column());
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
UseStatement
|
|
838
|
+
= UseToken __ identifiers:UseIdentifierList EOS
|
|
839
|
+
{ return new ast.UseStatement(identifiers) }
|
|
840
|
+
|
|
841
|
+
UseIdentifierList
|
|
842
|
+
= first:UseIdentifier rest:(__ "," __ UseIdentifier)* {
|
|
843
|
+
return buildList(first, rest, 3);
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
UseIdentifier
|
|
847
|
+
= Identifier
|
|
848
|
+
/ ":" id:Identifier {
|
|
849
|
+
return id.asPredefinedCollection();
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
ExpressionStatement
|
|
853
|
+
= !("{" / FnToken) expression:Expression EOS {
|
|
854
|
+
return insertLocationData(new ast.ExpressionStatement(expression), text(), line(), column());
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
AssignmentExpression
|
|
858
|
+
= left:Pattern __ "=" !"=" __ right:AssignmentExpression {
|
|
859
|
+
return insertLocationData(new ast.AssignmentExpression(
|
|
860
|
+
left, "=", right), text(), line(), column());
|
|
861
|
+
}
|
|
862
|
+
/ left:ConditionalExpression
|
|
863
|
+
assignment:(__ operator:AssignmentOperator __
|
|
864
|
+
right:AssignmentExpression)? {
|
|
865
|
+
if (!assignment) {
|
|
866
|
+
return left;
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
return insertLocationData(new ast.AssignmentExpression(
|
|
870
|
+
left,
|
|
871
|
+
extractOptional(assignment, 1),
|
|
872
|
+
extractOptional(assignment, 3)), text(), line(), column());
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
AssignmentOperator
|
|
876
|
+
= "=" !"=" { return "=" }
|
|
877
|
+
/ "*="
|
|
878
|
+
/ "/="
|
|
879
|
+
/ "%="
|
|
880
|
+
/ "+="
|
|
881
|
+
/ "-="
|
|
882
|
+
/ "<<="
|
|
883
|
+
/ ">>="
|
|
884
|
+
/ ">>>="
|
|
885
|
+
/ "&="
|
|
886
|
+
/ "^="
|
|
887
|
+
/ "|="
|
|
888
|
+
|
|
889
|
+
ConditionalExpression
|
|
890
|
+
= consequent:LogicalORExpression __
|
|
891
|
+
condition:(IfToken __ LogicalORExpression __
|
|
892
|
+
ElseToken __ LogicalORExpression)? {
|
|
893
|
+
if (condition) {
|
|
894
|
+
var test = extractOptional(condition, 2);
|
|
895
|
+
var alternate = extractOptional(condition, 6);
|
|
896
|
+
|
|
897
|
+
return insertLocationData(new ast.ConditionalExpression(test, consequent, alternate), text(), line(), column());
|
|
898
|
+
} else {
|
|
899
|
+
return consequent;
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
LogicalORExpression
|
|
904
|
+
= first:LogicalANDExpression
|
|
905
|
+
rest:(__ LogicalOROperator __ LogicalANDExpression)*
|
|
906
|
+
{ return buildLogicalExpression(first, rest); }
|
|
907
|
+
|
|
908
|
+
LogicalOROperator
|
|
909
|
+
= "||"
|
|
910
|
+
/ OrToken { return "||"; }
|
|
911
|
+
|
|
912
|
+
LogicalANDExpression
|
|
913
|
+
= first:BitwiseORExpression
|
|
914
|
+
rest:(__ LogicalANDOperator __ BitwiseORExpression)*
|
|
915
|
+
{ return buildLogicalExpression(first, rest); }
|
|
916
|
+
|
|
917
|
+
LogicalANDOperator
|
|
918
|
+
= "&&"
|
|
919
|
+
/ AndToken { return "&&"; }
|
|
920
|
+
|
|
921
|
+
BitwiseORExpression
|
|
922
|
+
= first:BitwiseXORExpression
|
|
923
|
+
rest:(__ BitwiseOROperator __ BitwiseXORExpression)*
|
|
924
|
+
{ return buildBinaryExpression(first, rest); }
|
|
925
|
+
|
|
926
|
+
BitwiseOROperator
|
|
927
|
+
= $("|" ![|=])
|
|
928
|
+
|
|
929
|
+
BitwiseXORExpression
|
|
930
|
+
= first:BitwiseANDExpression
|
|
931
|
+
rest:(__ BitwiseXOROperator __ BitwiseANDExpression)*
|
|
932
|
+
{ return buildBinaryExpression(first, rest); }
|
|
933
|
+
|
|
934
|
+
BitwiseXOROperator
|
|
935
|
+
= $("^" !"=")
|
|
936
|
+
|
|
937
|
+
BitwiseANDExpression
|
|
938
|
+
= first:EqualityExpression
|
|
939
|
+
rest:(__ BitwiseANDOperator __ EqualityExpression)*
|
|
940
|
+
{ return buildBinaryExpression(first, rest); }
|
|
941
|
+
|
|
942
|
+
BitwiseANDOperator
|
|
943
|
+
= $("&" ![&=])
|
|
944
|
+
|
|
945
|
+
EqualityExpression
|
|
946
|
+
= first:RelationalExpression
|
|
947
|
+
rest:(__ EqualityOperator __ RelationalExpression)*
|
|
948
|
+
{ return buildBinaryExpression(first, rest); }
|
|
949
|
+
|
|
950
|
+
EqualityOperator
|
|
951
|
+
= "=="
|
|
952
|
+
/ "!="
|
|
953
|
+
|
|
954
|
+
RelationalExpression
|
|
955
|
+
= first:InExpression
|
|
956
|
+
rest:(__ RelationalOperator __ InExpression)*
|
|
957
|
+
{ return buildBinaryExpression(first, rest); }
|
|
958
|
+
|
|
959
|
+
RelationalOperator
|
|
960
|
+
= "<="
|
|
961
|
+
/ ">="
|
|
962
|
+
/ $("<" !"<")
|
|
963
|
+
/ $(">" !">")
|
|
964
|
+
/ $InstanceofToken
|
|
965
|
+
|
|
966
|
+
InExpression
|
|
967
|
+
= left:NullCoalescingExpression
|
|
968
|
+
right:(__ InToken __ NullCoalescingExpression)? {
|
|
969
|
+
if (!right) {
|
|
970
|
+
return left;
|
|
971
|
+
}
|
|
972
|
+
return insertLocationData(new ast.InExpression(left, extractOptional(right, 3)), text(), line(), column());
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
NullCoalescingExpression
|
|
976
|
+
= first:ShiftExpression
|
|
977
|
+
rest:(__ "??" __ ShiftExpression)*
|
|
978
|
+
{ return buildNullCoalescingExpression(first, rest); }
|
|
979
|
+
|
|
980
|
+
ShiftExpression
|
|
981
|
+
= first:AdditiveExpression
|
|
982
|
+
rest:(__ ShiftOperator __ AdditiveExpression)*
|
|
983
|
+
{ return buildBinaryExpression(first, rest); }
|
|
984
|
+
|
|
985
|
+
ShiftOperator
|
|
986
|
+
= $("<<" !"=")
|
|
987
|
+
/ $(">>>" !"=")
|
|
988
|
+
/ $(">>" !"=")
|
|
989
|
+
|
|
990
|
+
AdditiveExpression
|
|
991
|
+
= first:MultiplicativeExpression
|
|
992
|
+
rest:(__ AdditiveOperator __ MultiplicativeExpression)*
|
|
993
|
+
{ return buildBinaryExpression(first, rest); }
|
|
994
|
+
|
|
995
|
+
AdditiveOperator
|
|
996
|
+
= $("+" ![+=])
|
|
997
|
+
/ $("-" ![-=])
|
|
998
|
+
|
|
999
|
+
MultiplicativeExpression
|
|
1000
|
+
= first:ExponentiativeExpression
|
|
1001
|
+
rest:(__ MultiplicativeOperator __ UnaryExpression)*
|
|
1002
|
+
{ return buildBinaryExpression(first, rest); }
|
|
1003
|
+
|
|
1004
|
+
MultiplicativeOperator
|
|
1005
|
+
= $("*" ![*=])
|
|
1006
|
+
/ $("/" !"=")
|
|
1007
|
+
/ $("#" !"=")
|
|
1008
|
+
/ $("%" ![%=])
|
|
1009
|
+
/ $("%%" !"=")
|
|
1010
|
+
|
|
1011
|
+
ExponentiativeExpression
|
|
1012
|
+
= first:UnaryExpression
|
|
1013
|
+
rest:(__ ExponentiativeOperator __ UnaryExpression)*
|
|
1014
|
+
{ return buildBinaryExpression(first, rest); }
|
|
1015
|
+
|
|
1016
|
+
ExponentiativeOperator
|
|
1017
|
+
= $("**" !"=")
|
|
1018
|
+
|
|
1019
|
+
UnaryExpression
|
|
1020
|
+
= operator:UnaryOperator __ argument:PostfixExpression {
|
|
1021
|
+
if (operator === "++" || operator === "--") {
|
|
1022
|
+
return insertLocationData(new ast.UpdateExpression(argument, operator, true), text(), line(), column());
|
|
1023
|
+
} else {
|
|
1024
|
+
return insertLocationData(new ast.UnaryExpression(operator, argument), text(), line(), column());
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
/ PostfixExpression
|
|
1028
|
+
|
|
1029
|
+
UnaryOperator
|
|
1030
|
+
= $DeleteToken
|
|
1031
|
+
/ $TypeofToken
|
|
1032
|
+
/ $AsyncToken
|
|
1033
|
+
/ $AwaitToken
|
|
1034
|
+
/ $NotToken { return "!" }
|
|
1035
|
+
/ "<-"
|
|
1036
|
+
/ "++"
|
|
1037
|
+
/ "--"
|
|
1038
|
+
/ $("+" !"=")
|
|
1039
|
+
/ $("-" !"=")
|
|
1040
|
+
/ "!"
|
|
1041
|
+
|
|
1042
|
+
PostfixExpression
|
|
1043
|
+
= argument:ExistentialExpression _ operator:PostfixOperator? {
|
|
1044
|
+
if (operator) {
|
|
1045
|
+
return insertLocationData(new ast.UpdateExpression(argument, operator, false), text(), line(), column());
|
|
1046
|
+
} else {
|
|
1047
|
+
return argument;
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
PostfixOperator
|
|
1052
|
+
= "++"
|
|
1053
|
+
/ "--"
|
|
1054
|
+
|
|
1055
|
+
ExistentialExpression
|
|
1056
|
+
= argument:LeftHandSideExpression operator:"?"? !"?" {
|
|
1057
|
+
if (operator) {
|
|
1058
|
+
return insertLocationData(new ast.ExistentialExpression(argument), text(), line(), column());
|
|
1059
|
+
} else {
|
|
1060
|
+
return argument;
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
LeftHandSideExpression
|
|
1065
|
+
= CallExpression
|
|
1066
|
+
|
|
1067
|
+
CallExpression
|
|
1068
|
+
= first:(
|
|
1069
|
+
callee:MemberExpression call:(__ CallExpressionOperator? __ args:Arguments)? {
|
|
1070
|
+
if (!call) {
|
|
1071
|
+
return callee;
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
var op = extractOptional(call, 1);
|
|
1075
|
+
if (op === "?") {
|
|
1076
|
+
return insertLocationData(new ast.NullCheckCallExpression(callee, extractOptional(call, 3)), text(), line(), column());
|
|
1077
|
+
} else if (op === "^") {
|
|
1078
|
+
return insertLocationData(new ast.CurryCallExpression(callee, extractOptional(call, 3)), text(), line(), column());
|
|
1079
|
+
} else {
|
|
1080
|
+
return insertLocationData(new ast.CallExpression(callee, extractOptional(call, 3)), text(), line(), column());
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
)
|
|
1084
|
+
rest:(
|
|
1085
|
+
__ operator:CallExpressionOperator? __ args:Arguments {
|
|
1086
|
+
var type = "CallExpression";
|
|
1087
|
+
if (operator === "?") {
|
|
1088
|
+
type = "NullCheckCallExpression";
|
|
1089
|
+
} else if (operator === "^") {
|
|
1090
|
+
type = "CurryCallExpression";
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
return {
|
|
1094
|
+
type: type,
|
|
1095
|
+
arguments: args
|
|
1096
|
+
};
|
|
1097
|
+
}
|
|
1098
|
+
/ __ "[" __ property:Expression __ "]" {
|
|
1099
|
+
return {
|
|
1100
|
+
type: "MemberExpression",
|
|
1101
|
+
property: property,
|
|
1102
|
+
computed: true
|
|
1103
|
+
};
|
|
1104
|
+
}
|
|
1105
|
+
/ __ "[" __ range:OptionalRange __ "]" {
|
|
1106
|
+
return {
|
|
1107
|
+
type: "RangeMemberExpression",
|
|
1108
|
+
range: range
|
|
1109
|
+
}
|
|
1110
|
+
}
|
|
1111
|
+
/ __ nullPropagatingOperator:"?"? __ "." !"." __ property:IdentifierName {
|
|
1112
|
+
return {
|
|
1113
|
+
type: nullPropagatingOperator === "?" ? "NullPropagatingExpression" : "MemberExpression",
|
|
1114
|
+
property: property,
|
|
1115
|
+
computed: false
|
|
1116
|
+
};
|
|
1117
|
+
}
|
|
1118
|
+
)*
|
|
1119
|
+
{
|
|
1120
|
+
return buildTree(first, rest, function(result, element) {
|
|
1121
|
+
if (element.type === "MemberExpression") {
|
|
1122
|
+
return insertLocationData(new ast.MemberExpression(result, element.property, element.computed), text(), line(), column());
|
|
1123
|
+
} if (element.type === "NullPropagatingExpression") {
|
|
1124
|
+
return insertLocationData(new ast.NullPropagatingExpression(result, element.property, element.computed), text(), line(), column());
|
|
1125
|
+
} else if (element.type === "CallExpression") {
|
|
1126
|
+
return insertLocationData(new ast.CallExpression(result, element.arguments), text(), line(), column());
|
|
1127
|
+
} else if (element.type === "CurryCallExpression") {
|
|
1128
|
+
return insertLocationData(new ast.CurryCallExpression(result, element.arguments), text(), line(), column());
|
|
1129
|
+
} else if (element.type === "NullCheckCallExpression") {
|
|
1130
|
+
return insertLocationData(new ast.NullCheckCallExpression(result, element.arguments), text(), line(), column());
|
|
1131
|
+
} else if (element.type === "RangeMemberExpression") {
|
|
1132
|
+
return insertLocationData(new ast.RangeMemberExpression(result, element.range), text(), line(), column());
|
|
1133
|
+
}
|
|
1134
|
+
});
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
CallExpressionOperator
|
|
1138
|
+
= "?"
|
|
1139
|
+
/ "^"
|
|
1140
|
+
|
|
1141
|
+
MemberExpression
|
|
1142
|
+
= first:(
|
|
1143
|
+
FunctionExpression
|
|
1144
|
+
/ NewToken __ callee:MemberExpression __ args:Arguments {
|
|
1145
|
+
return insertLocationData(new ast.NewExpression(callee, args), text(), line(), column());
|
|
1146
|
+
}
|
|
1147
|
+
)
|
|
1148
|
+
rest:(
|
|
1149
|
+
__ "[" __ property:Expression __ "]" {
|
|
1150
|
+
return {
|
|
1151
|
+
type: "MemberExpression",
|
|
1152
|
+
property: property,
|
|
1153
|
+
computed: true
|
|
1154
|
+
};
|
|
1155
|
+
}
|
|
1156
|
+
/ __ nullPropagatingOperator:"?"? __ "." !"." __ property:IdentifierName {
|
|
1157
|
+
return {
|
|
1158
|
+
type: nullPropagatingOperator === "?" ? "NullPropagatingExpression" : "MemberExpression",
|
|
1159
|
+
property: property,
|
|
1160
|
+
computed: false
|
|
1161
|
+
};
|
|
1162
|
+
}
|
|
1163
|
+
/ __ "[" __ range:OptionalRange __ "]" {
|
|
1164
|
+
return {
|
|
1165
|
+
type: "RangeMemberExpression",
|
|
1166
|
+
range: range
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
)*
|
|
1170
|
+
{
|
|
1171
|
+
return buildTree(first, rest, function (result, element) {
|
|
1172
|
+
if (element.type === "NullPropagatingExpression") {
|
|
1173
|
+
return insertLocationData(new ast.NullPropagatingExpression(result, element.property, element.computed), text(), line(), column());
|
|
1174
|
+
} else if (element.type === "MemberExpression") {
|
|
1175
|
+
return insertLocationData(new ast.MemberExpression(result, element.property, element.computed), text(), line(), column());
|
|
1176
|
+
} else if (element.type === "RangeMemberExpression") {
|
|
1177
|
+
return insertLocationData(new ast.RangeMemberExpression(result, element.range), text(), line(), column());
|
|
1178
|
+
}
|
|
1179
|
+
});
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
Arguments
|
|
1183
|
+
= "(" __ args:(ArgumentList __)? ")" {
|
|
1184
|
+
return optionalList(extractOptional(args, 0));
|
|
1185
|
+
}
|
|
1186
|
+
|
|
1187
|
+
ArgumentList
|
|
1188
|
+
= first:Argument rest:(__ "," __ Argument)* {
|
|
1189
|
+
return buildList(first, rest, 3);
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
Argument
|
|
1193
|
+
= expression:AssignmentExpression __ "..." {
|
|
1194
|
+
return insertLocationData(new ast.SplatExpression(expression), text(), line(), column());
|
|
1195
|
+
}
|
|
1196
|
+
/ AssignmentExpression
|
|
1197
|
+
|
|
1198
|
+
FunctionExpression
|
|
1199
|
+
= FnToken __ id:(Identifier __)?
|
|
1200
|
+
"(" __ params:(FormalParameterList __)? ")" __
|
|
1201
|
+
inheritsFrom:InheritsFrom?
|
|
1202
|
+
__ body:Block __
|
|
1203
|
+
{
|
|
1204
|
+
return insertLocationData(new ast.FunctionExpression(
|
|
1205
|
+
extractOptional(id, 0),
|
|
1206
|
+
optionalList(extractOptional(params, 0)),
|
|
1207
|
+
body,
|
|
1208
|
+
inheritsFrom
|
|
1209
|
+
), text(), line(), column());
|
|
1210
|
+
}
|
|
1211
|
+
/ "(" __ params:(FormalParameterList __)? ")"
|
|
1212
|
+
__ operator:FunctionExpressionOperator
|
|
1213
|
+
__ body:Block __
|
|
1214
|
+
{
|
|
1215
|
+
return insertLocationData(new ast.FunctionExpression(
|
|
1216
|
+
null,
|
|
1217
|
+
optionalList(extractOptional(params, 0)),
|
|
1218
|
+
body,
|
|
1219
|
+
null,
|
|
1220
|
+
operator
|
|
1221
|
+
), text(), line(), column());
|
|
1222
|
+
}
|
|
1223
|
+
/ "(" __ params:(FormalParameterList __)? ")"
|
|
1224
|
+
__ operator:FunctionExpressionOperator
|
|
1225
|
+
__ body:Expression __
|
|
1226
|
+
{
|
|
1227
|
+
return insertLocationData(new ast.FunctionExpression(
|
|
1228
|
+
null,
|
|
1229
|
+
optionalList(extractOptional(params, 0)),
|
|
1230
|
+
body,
|
|
1231
|
+
null,
|
|
1232
|
+
operator
|
|
1233
|
+
), text(), line(), column());
|
|
1234
|
+
}
|
|
1235
|
+
/ ForInExpression
|
|
1236
|
+
|
|
1237
|
+
FunctionExpressionOperator
|
|
1238
|
+
= "->"
|
|
1239
|
+
/ "=>"
|
|
1240
|
+
|
|
1241
|
+
ForInExpression
|
|
1242
|
+
= "[" __
|
|
1243
|
+
expression:Expression __
|
|
1244
|
+
ForToken __
|
|
1245
|
+
item:Identifier __
|
|
1246
|
+
index:("," __ Identifier __)?
|
|
1247
|
+
InToken __
|
|
1248
|
+
array:Expression __
|
|
1249
|
+
condition:(IfToken __ Expression __)?
|
|
1250
|
+
"]" {
|
|
1251
|
+
return insertLocationData(new ast.ForInExpression(
|
|
1252
|
+
expression,
|
|
1253
|
+
item,
|
|
1254
|
+
index ? extractOptional(index, 2) : null,
|
|
1255
|
+
array,
|
|
1256
|
+
condition ? extractOptional(condition, 2) : null
|
|
1257
|
+
), text(), line(), column());
|
|
1258
|
+
}
|
|
1259
|
+
/ GlobalIdentifierExpression
|
|
1260
|
+
|
|
1261
|
+
GlobalIdentifierExpression
|
|
1262
|
+
= "::" __ id:Identifier
|
|
1263
|
+
{ return id.asGlobal(); }
|
|
1264
|
+
/ PrimaryExpression
|
|
1265
|
+
|
|
1266
|
+
PrimaryExpression
|
|
1267
|
+
= ThisExpression
|
|
1268
|
+
/ SuperExpression
|
|
1269
|
+
/ RangeExpression
|
|
1270
|
+
/ Identifier
|
|
1271
|
+
/ Literal
|
|
1272
|
+
/ ArrayLiteral
|
|
1273
|
+
/ ObjectLiteral
|
|
1274
|
+
/ "(" __ expression:Expression __ ")" { return expression; }
|
|
1275
|
+
|
|
1276
|
+
ThisExpression
|
|
1277
|
+
= ThisToken {
|
|
1278
|
+
return insertLocationData(new ast.ThisExpression(), text(), line(), column());
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1281
|
+
SuperExpression
|
|
1282
|
+
= SuperToken {
|
|
1283
|
+
return insertLocationData(new ast.SuperExpression(), text(), line(), column());
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
RangeExpression
|
|
1287
|
+
= "[" __ range:Range __ "]" {
|
|
1288
|
+
return range;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
Range
|
|
1292
|
+
= from:Expression __ operator:RangeOperator __ to:Expression {
|
|
1293
|
+
return insertLocationData(new ast.Range(from, operator, to), text(), line(), column());
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
OptionalRange
|
|
1297
|
+
= from:Expression? __ operator:RangeOperator __ to:Expression? {
|
|
1298
|
+
return insertLocationData(new ast.Range(from, operator, to), text(), line(), column());
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
RangeOperator
|
|
1302
|
+
= ".." !"." { return ".."; }
|
|
1303
|
+
/ "..."
|
|
1304
|
+
|
|
1305
|
+
Expression
|
|
1306
|
+
= expression:AssignmentExpression {
|
|
1307
|
+
return expression;
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
ArrayLiteral
|
|
1311
|
+
= "[" __ elision:(Elision __)? "]" {
|
|
1312
|
+
return insertLocationData(new ast.ArrayExpression(optionalList(extractOptional(elision, 0))), text(), line(), column());
|
|
1313
|
+
}
|
|
1314
|
+
/ "[" __ elements:ElementList __ "]" {
|
|
1315
|
+
return insertLocationData(new ast.ArrayExpression(elements), text(), line(), column());
|
|
1316
|
+
}
|
|
1317
|
+
/ "[" __ elements:ElementList __ "," __ elision:(Elision __)? "]" {
|
|
1318
|
+
return insertLocationData(new ast.ArrayExpression(elements.concat(optionalList(extractOptional(elision, 0)))), text(), line(), column());
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
ElementList
|
|
1322
|
+
= first:(
|
|
1323
|
+
elision:(Elision __)? element:AssignmentExpression {
|
|
1324
|
+
return optionalList(extractOptional(elision, 0)).concat(element);
|
|
1325
|
+
}
|
|
1326
|
+
)
|
|
1327
|
+
rest:(
|
|
1328
|
+
__ "," __ elision:(Elision __)? element:AssignmentExpression {
|
|
1329
|
+
return optionalList(extractOptional(elision, 0)).concat(element);
|
|
1330
|
+
}
|
|
1331
|
+
)*
|
|
1332
|
+
{ return Array.prototype.concat.apply(first, rest); }
|
|
1333
|
+
|
|
1334
|
+
ArrayPattern
|
|
1335
|
+
= "[" __ elision:(Elision __)? "]" {
|
|
1336
|
+
return insertLocationData(new ast.ArrayPattern(optionalList(extractOptional(elision, 0))), text(), line(), column());
|
|
1337
|
+
}
|
|
1338
|
+
/ "[" __ elements:PatternElementList __ "]" {
|
|
1339
|
+
return insertLocationData(new ast.ArrayPattern(elements), text(), line(), column());
|
|
1340
|
+
}
|
|
1341
|
+
/ "[" __ elements:PatternElementList __ "," __ elision:(Elision __)? "]" {
|
|
1342
|
+
return insertLocationData(new ast.ArrayPattern(elements.concat(optionalList(extractOptional(elision, 0)))), text(), line(), column());
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
PatternElementList
|
|
1346
|
+
= first:(
|
|
1347
|
+
elision:(Elision __)? element:PatternElement {
|
|
1348
|
+
return optionalList(extractOptional(elision, 0)).concat(element);
|
|
1349
|
+
}
|
|
1350
|
+
)
|
|
1351
|
+
rest:(
|
|
1352
|
+
__ "," __ elision:(Elision __)? element:PatternElement {
|
|
1353
|
+
return optionalList(extractOptional(elision, 0)).concat(element);
|
|
1354
|
+
}
|
|
1355
|
+
)*
|
|
1356
|
+
{ return Array.prototype.concat.apply(first, rest); }
|
|
1357
|
+
|
|
1358
|
+
PatternElement
|
|
1359
|
+
= Identifier
|
|
1360
|
+
/ ArrayPattern
|
|
1361
|
+
|
|
1362
|
+
Elision
|
|
1363
|
+
= "," commas:(__ ",")* { return filledArray(commas.length + 1, null); }
|
|
1364
|
+
|
|
1365
|
+
ObjectLiteral
|
|
1366
|
+
= "{" __ "}" {
|
|
1367
|
+
return new ast.ObjectExpression([]);
|
|
1368
|
+
}
|
|
1369
|
+
/ "{" __ properties:PropertyNameAndValueList __ "}" {
|
|
1370
|
+
return insertLocationData(new ast.ObjectExpression(properties), text(), line(), column());
|
|
1371
|
+
}
|
|
1372
|
+
/ "{" __ properties:PropertyNameAndValueList __ "," __ "}" {
|
|
1373
|
+
return insertLocationData(new ast.ObjectExpression(properties), text(), line(), column());
|
|
1374
|
+
}
|
|
1375
|
+
|
|
1376
|
+
PropertyNameAndValueList
|
|
1377
|
+
= first:PropertyAssignment rest:(__ "," __ PropertyAssignment)* {
|
|
1378
|
+
return buildList(first, rest, 3);
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
PropertyAssignment
|
|
1382
|
+
= key:PropertyName __ ":" __ value:AssignmentExpression {
|
|
1383
|
+
return insertLocationData(new ast.Property(key, value, false, false), text(), line(), column());
|
|
1384
|
+
}
|
|
1385
|
+
/ key:PropertyName __
|
|
1386
|
+
"(" __ params:(FormalParameterList __)? ")"
|
|
1387
|
+
__ body:Block __
|
|
1388
|
+
{
|
|
1389
|
+
return insertLocationData(new ast.Property(key, new ast.FunctionExpression(
|
|
1390
|
+
null,
|
|
1391
|
+
optionalList(extractOptional(params, 0)),
|
|
1392
|
+
body,
|
|
1393
|
+
null
|
|
1394
|
+
), false, true), text(), line(), column());
|
|
1395
|
+
}
|
|
1396
|
+
/ key:IdentifierName {
|
|
1397
|
+
return insertLocationData(new ast.Property(key, key, true, false), text(), line(), column());
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
PropertyName
|
|
1401
|
+
= IdentifierName
|
|
1402
|
+
/ StringLiteral
|
|
1403
|
+
/ NumericLiteral
|
|
1404
|
+
|
|
1405
|
+
ObjectPattern
|
|
1406
|
+
= "{" __ "}" {
|
|
1407
|
+
return new ast.ObjectPattern([]);
|
|
1408
|
+
}
|
|
1409
|
+
/ "{" __ properties:PatternPropertyNameAndValueList __ "}" {
|
|
1410
|
+
return insertLocationData(new ast.ObjectPattern(properties), text(), line(), column());
|
|
1411
|
+
}
|
|
1412
|
+
/ "{" __ properties:PatternPropertyNameAndValueList __ "," __ "}" {
|
|
1413
|
+
return insertLocationData(new ast.ObjectPattern(properties), text(), line(), column());
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
PatternPropertyNameAndValueList
|
|
1417
|
+
= first:PatternPropertyAssignment rest:(__ "," __ PatternPropertyAssignment)* {
|
|
1418
|
+
return buildList(first, rest, 3);
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1421
|
+
PatternPropertyAssignment
|
|
1422
|
+
= key:IdentifierName __ ":" __ value:IdentifierName {
|
|
1423
|
+
return insertLocationData(new ast.Property(key, value, false, false), text(), line(), column());
|
|
1424
|
+
}
|
|
1425
|
+
/ key:IdentifierName __ ":" __ value:ObjectPattern {
|
|
1426
|
+
return insertLocationData(new ast.Property(key, value, false, false), text(), line(), column());
|
|
1427
|
+
}
|
|
1428
|
+
/ key:IdentifierName {
|
|
1429
|
+
return insertLocationData(new ast.Property(key, key, true, false), text(), line(), column());
|
|
1430
|
+
}
|
|
1431
|
+
|
|
1432
|
+
Pattern
|
|
1433
|
+
= ObjectPattern
|
|
1434
|
+
/ ArrayPattern
|