Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Side by Side Diff: pkg/front_end/lib/src/fasta/scanner/precedence.dart

Issue 2835543002: start merging fasta.precedence into analyzer.TokenType (Closed)
Patch Set: rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pkg/front_end/lib/src/scanner/token.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library fasta.scanner.precedence; 5 library fasta.scanner.precedence;
6 6
7 import '../../scanner/token.dart'; 7 import '../../scanner/token.dart';
8 import 'token_constants.dart'; 8 import 'token_constants.dart';
9 9
10 class PrecedenceInfo implements TokenType { 10 class PrecedenceInfo extends TokenType {
11 final String value; 11 const PrecedenceInfo(String value, String name, int precedence, int kind,
12 final String name; 12 {bool isOperator: false, bool isUserDefinableOperator: false})
13 final int precedence; 13 : super(value, name, precedence, kind,
14 final int kind; 14 isOperator: isOperator,
15 final bool isOperator; 15 isUserDefinableOperator: isUserDefinableOperator);
16 final bool isUserDefinableOperator;
17
18 const PrecedenceInfo(this.value, this.name, this.precedence, this.kind,
19 {this.isOperator: false, this.isUserDefinableOperator: false});
20 16
21 toString() => 'PrecedenceInfo($value, $name, $precedence, $kind)'; 17 toString() => 'PrecedenceInfo($value, $name, $precedence, $kind)';
22 18
23 static const List<PrecedenceInfo> all = const <PrecedenceInfo>[ 19 static const List<PrecedenceInfo> all = const <PrecedenceInfo>[
24 BACKPING_INFO, 20 BACKPING_INFO,
25 BACKSLASH_INFO, 21 BACKSLASH_INFO,
26 PERIOD_PERIOD_PERIOD_INFO, 22 PERIOD_PERIOD_PERIOD_INFO,
27 PERIOD_PERIOD_INFO, 23 PERIOD_PERIOD_INFO,
28 BANG_INFO, 24 BANG_INFO,
29 COLON_INFO, 25 COLON_INFO,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 CLOSE_SQUARE_BRACKET_INFO, 87 CLOSE_SQUARE_BRACKET_INFO,
92 DOUBLE_INFO, 88 DOUBLE_INFO,
93 STRING_INTERPOLATION_INFO, 89 STRING_INTERPOLATION_INFO,
94 STRING_INTERPOLATION_IDENTIFIER_INFO, 90 STRING_INTERPOLATION_IDENTIFIER_INFO,
95 HEXADECIMAL_INFO, 91 HEXADECIMAL_INFO,
96 SINGLE_LINE_COMMENT_INFO, 92 SINGLE_LINE_COMMENT_INFO,
97 MULTI_LINE_COMMENT_INFO, 93 MULTI_LINE_COMMENT_INFO,
98 GENERIC_METHOD_TYPE_ASSIGN, 94 GENERIC_METHOD_TYPE_ASSIGN,
99 GENERIC_METHOD_TYPE_LIST, 95 GENERIC_METHOD_TYPE_LIST,
100 ]; 96 ];
97 }
101 98
102 @override 99 const int NO_PRECEDENCE = 0;
103 bool get isAdditiveOperator => precedence == ADDITIVE_PRECEDENCE; 100 const int ASSIGNMENT_PRECEDENCE = 1;
104 101 const int CASCADE_PRECEDENCE = 2;
105 @override 102 const int CONDITIONAL_PRECEDENCE = 3;
106 bool get isAssignmentOperator => precedence == ASSIGNMENT_PRECEDENCE; 103 const int IF_NULL_PRECEDENCE = 4;
107 104 const int LOGICAL_OR_PRECEDENCE = 5;
108 @override 105 const int LOGICAL_AND_PRECEDENCE = 6;
109 bool get isAssociativeOperator => 106 const int EQUALITY_PRECEDENCE = 7;
110 this == AMPERSAND_INFO || 107 const int RELATIONAL_PRECEDENCE = 8;
111 this == AMPERSAND_AMPERSAND_INFO || 108 const int BITWISE_OR_PRECEDENCE = 9;
112 this == BAR_INFO || 109 const int BITWISE_XOR_PRECEDENCE = 10;
113 this == BAR_BAR_INFO || 110 const int BITWISE_AND_PRECEDENCE = 11;
114 this == CARET_INFO || 111 const int SHIFT_PRECEDENCE = 12;
115 this == PLUS_INFO || 112 const int ADDITIVE_PRECEDENCE = 13;
116 this == STAR_INFO; 113 const int MULTIPLICATIVE_PRECEDENCE = 14;
117 114 const int PREFIX_PRECEDENCE = 15;
118 @override 115 const int POSTFIX_PRECEDENCE = 16;
119 bool get isEqualityOperator => this == BANG_EQ_INFO || this == EQ_EQ_INFO;
120
121 @override
122 bool get isIncrementOperator =>
123 this == PLUS_PLUS_INFO || this == MINUS_MINUS_INFO;
124
125 @override
126 bool get isMultiplicativeOperator => precedence == MULTIPLICATIVE_PRECEDENCE;
127
128 @override
129 bool get isRelationalOperator =>
130 this == LT_INFO ||
131 this == LT_EQ_INFO ||
132 this == GT_INFO ||
133 this == GT_EQ_INFO;
134
135 @override
136 bool get isShiftOperator => precedence == SHIFT_PRECEDENCE;
137
138 @override
139 bool get isUnaryPostfixOperator => precedence == POSTFIX_PRECEDENCE;
140
141 @override
142 bool get isUnaryPrefixOperator =>
143 precedence == PREFIX_PRECEDENCE ||
144 this == PLUS_PLUS_INFO ||
145 this == MINUS_MINUS_INFO;
146
147 @override
148 String get lexeme => value;
149 }
150 116
151 // TODO(ahe): The following are not tokens in Dart. 117 // TODO(ahe): The following are not tokens in Dart.
152 const PrecedenceInfo BACKPING_INFO = 118 const PrecedenceInfo BACKPING_INFO =
153 const PrecedenceInfo('`', 'BACKPING', 0, BACKPING_TOKEN); 119 const PrecedenceInfo('`', 'BACKPING', NO_PRECEDENCE, BACKPING_TOKEN);
154 const PrecedenceInfo BACKSLASH_INFO = 120 const PrecedenceInfo BACKSLASH_INFO =
155 const PrecedenceInfo('\\', 'BACKSLASH', 0, BACKSLASH_TOKEN); 121 const PrecedenceInfo('\\', 'BACKSLASH', NO_PRECEDENCE, BACKSLASH_TOKEN);
156 const PrecedenceInfo PERIOD_PERIOD_PERIOD_INFO = const PrecedenceInfo( 122 const PrecedenceInfo PERIOD_PERIOD_PERIOD_INFO = const PrecedenceInfo(
157 '...', 'PERIOD_PERIOD_PERIOD', 0, PERIOD_PERIOD_PERIOD_TOKEN); 123 '...', 'PERIOD_PERIOD_PERIOD', NO_PRECEDENCE, PERIOD_PERIOD_PERIOD_TOKEN);
158 124
159 /** 125 /**
160 * The cascade operator has the lowest precedence of any operator 126 * The cascade operator has the lowest precedence of any operator
161 * except assignment. 127 * except assignment.
162 */ 128 */
163 const int CASCADE_PRECEDENCE = 2;
164 const PrecedenceInfo PERIOD_PERIOD_INFO = const PrecedenceInfo( 129 const PrecedenceInfo PERIOD_PERIOD_INFO = const PrecedenceInfo(
165 '..', 'PERIOD_PERIOD', CASCADE_PRECEDENCE, PERIOD_PERIOD_TOKEN, 130 '..', 'PERIOD_PERIOD', CASCADE_PRECEDENCE, PERIOD_PERIOD_TOKEN,
166 isOperator: true); 131 isOperator: true);
167 132
168 const int PREFIX_PRECEDENCE = 15;
169 const PrecedenceInfo BANG_INFO = const PrecedenceInfo( 133 const PrecedenceInfo BANG_INFO = const PrecedenceInfo(
170 '!', 'BANG', PREFIX_PRECEDENCE, BANG_TOKEN, 134 '!', 'BANG', PREFIX_PRECEDENCE, BANG_TOKEN,
171 isOperator: true); 135 isOperator: true);
172 const PrecedenceInfo COLON_INFO = 136 const PrecedenceInfo COLON_INFO =
173 const PrecedenceInfo(':', 'COLON', 0, COLON_TOKEN); 137 const PrecedenceInfo(':', 'COLON', NO_PRECEDENCE, COLON_TOKEN);
174 const PrecedenceInfo INDEX_INFO = const PrecedenceInfo( 138 const PrecedenceInfo INDEX_INFO = const PrecedenceInfo(
175 '[]', 'INDEX', 0, INDEX_TOKEN, 139 '[]', 'INDEX', NO_PRECEDENCE, INDEX_TOKEN,
176 isOperator: true, isUserDefinableOperator: true); 140 isOperator: true, isUserDefinableOperator: true);
177 const PrecedenceInfo MINUS_MINUS_INFO = const PrecedenceInfo( 141 const PrecedenceInfo MINUS_MINUS_INFO = const PrecedenceInfo(
178 '--', 'MINUS_MINUS', POSTFIX_PRECEDENCE, MINUS_MINUS_TOKEN, 142 '--', 'MINUS_MINUS', POSTFIX_PRECEDENCE, MINUS_MINUS_TOKEN,
179 isOperator: true); 143 isOperator: true);
180 const PrecedenceInfo PLUS_PLUS_INFO = const PrecedenceInfo( 144 const PrecedenceInfo PLUS_PLUS_INFO = const PrecedenceInfo(
181 '++', 'PLUS_PLUS', POSTFIX_PRECEDENCE, PLUS_PLUS_TOKEN, 145 '++', 'PLUS_PLUS', POSTFIX_PRECEDENCE, PLUS_PLUS_TOKEN,
182 isOperator: true); 146 isOperator: true);
183 const PrecedenceInfo TILDE_INFO = const PrecedenceInfo( 147 const PrecedenceInfo TILDE_INFO = const PrecedenceInfo(
184 '~', 'TILDE', PREFIX_PRECEDENCE, TILDE_TOKEN, 148 '~', 'TILDE', PREFIX_PRECEDENCE, TILDE_TOKEN,
185 isOperator: true, isUserDefinableOperator: true); 149 isOperator: true, isUserDefinableOperator: true);
186 150
187 const PrecedenceInfo FUNCTION_INFO = 151 const PrecedenceInfo FUNCTION_INFO =
188 const PrecedenceInfo('=>', 'FUNCTION', 0, FUNCTION_TOKEN); 152 const PrecedenceInfo('=>', 'FUNCTION', NO_PRECEDENCE, FUNCTION_TOKEN);
189 const PrecedenceInfo HASH_INFO = 153 const PrecedenceInfo HASH_INFO =
190 const PrecedenceInfo('#', 'HASH', 0, HASH_TOKEN); 154 const PrecedenceInfo('#', 'HASH', NO_PRECEDENCE, HASH_TOKEN);
191 const PrecedenceInfo INDEX_EQ_INFO = const PrecedenceInfo( 155 const PrecedenceInfo INDEX_EQ_INFO = const PrecedenceInfo(
192 '[]=', 'INDEX_EQ', 0, INDEX_EQ_TOKEN, 156 '[]=', 'INDEX_EQ', NO_PRECEDENCE, INDEX_EQ_TOKEN,
193 isOperator: true, isUserDefinableOperator: true); 157 isOperator: true, isUserDefinableOperator: true);
194 const PrecedenceInfo SEMICOLON_INFO = 158 const PrecedenceInfo SEMICOLON_INFO =
195 const PrecedenceInfo(';', 'SEMICOLON', 0, SEMICOLON_TOKEN); 159 const PrecedenceInfo(';', 'SEMICOLON', NO_PRECEDENCE, SEMICOLON_TOKEN);
196 const PrecedenceInfo COMMA_INFO = 160 const PrecedenceInfo COMMA_INFO =
197 const PrecedenceInfo(',', 'COMMA', 0, COMMA_TOKEN); 161 const PrecedenceInfo(',', 'COMMA', NO_PRECEDENCE, COMMA_TOKEN);
198 162
199 const PrecedenceInfo AT_INFO = const PrecedenceInfo('@', 'AT', 0, AT_TOKEN); 163 const PrecedenceInfo AT_INFO =
164 const PrecedenceInfo('@', 'AT', NO_PRECEDENCE, AT_TOKEN);
200 165
201 // Assignment operators. 166 // Assignment operators.
202 const int ASSIGNMENT_PRECEDENCE = 1;
203 const PrecedenceInfo AMPERSAND_EQ_INFO = const PrecedenceInfo( 167 const PrecedenceInfo AMPERSAND_EQ_INFO = const PrecedenceInfo(
204 '&=', 'AMPERSAND_EQ', ASSIGNMENT_PRECEDENCE, AMPERSAND_EQ_TOKEN, 168 '&=', 'AMPERSAND_EQ', ASSIGNMENT_PRECEDENCE, AMPERSAND_EQ_TOKEN,
205 isOperator: true); 169 isOperator: true);
206 const PrecedenceInfo BAR_EQ_INFO = const PrecedenceInfo( 170 const PrecedenceInfo BAR_EQ_INFO = const PrecedenceInfo(
207 '|=', 'BAR_EQ', ASSIGNMENT_PRECEDENCE, BAR_EQ_TOKEN, 171 '|=', 'BAR_EQ', ASSIGNMENT_PRECEDENCE, BAR_EQ_TOKEN,
208 isOperator: true); 172 isOperator: true);
209 const PrecedenceInfo CARET_EQ_INFO = const PrecedenceInfo( 173 const PrecedenceInfo CARET_EQ_INFO = const PrecedenceInfo(
210 '^=', 'CARET_EQ', ASSIGNMENT_PRECEDENCE, CARET_EQ_TOKEN, 174 '^=', 'CARET_EQ', ASSIGNMENT_PRECEDENCE, CARET_EQ_TOKEN,
211 isOperator: true); 175 isOperator: true);
212 const PrecedenceInfo EQ_INFO = const PrecedenceInfo( 176 const PrecedenceInfo EQ_INFO = const PrecedenceInfo(
(...skipping 20 matching lines...) Expand all
233 const PrecedenceInfo STAR_EQ_INFO = const PrecedenceInfo( 197 const PrecedenceInfo STAR_EQ_INFO = const PrecedenceInfo(
234 '*=', 'STAR_EQ', ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN, 198 '*=', 'STAR_EQ', ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN,
235 isOperator: true); 199 isOperator: true);
236 const PrecedenceInfo TILDE_SLASH_EQ_INFO = const PrecedenceInfo( 200 const PrecedenceInfo TILDE_SLASH_EQ_INFO = const PrecedenceInfo(
237 '~/=', 'TILDE_SLASH_EQ', ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN, 201 '~/=', 'TILDE_SLASH_EQ', ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN,
238 isOperator: true); 202 isOperator: true);
239 const PrecedenceInfo QUESTION_QUESTION_EQ_INFO = const PrecedenceInfo('??=', 203 const PrecedenceInfo QUESTION_QUESTION_EQ_INFO = const PrecedenceInfo('??=',
240 'QUESTION_QUESTION_EQ', ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN, 204 'QUESTION_QUESTION_EQ', ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN,
241 isOperator: true); 205 isOperator: true);
242 206
243 const PrecedenceInfo QUESTION_INFO = 207 const PrecedenceInfo QUESTION_INFO = const PrecedenceInfo(
244 const PrecedenceInfo('?', 'QUESTION', 3, QUESTION_TOKEN, isOperator: true); 208 '?', 'QUESTION', CONDITIONAL_PRECEDENCE, QUESTION_TOKEN,
209 isOperator: true);
245 210
246 const PrecedenceInfo QUESTION_QUESTION_INFO = const PrecedenceInfo( 211 const PrecedenceInfo QUESTION_QUESTION_INFO = const PrecedenceInfo(
247 '??', 'QUESTION_QUESTION', 4, QUESTION_QUESTION_TOKEN, 212 '??', 'QUESTION_QUESTION', IF_NULL_PRECEDENCE, QUESTION_QUESTION_TOKEN,
248 isOperator: true); 213 isOperator: true);
249 214
250 const PrecedenceInfo BAR_BAR_INFO = 215 const PrecedenceInfo BAR_BAR_INFO = const PrecedenceInfo(
251 const PrecedenceInfo('||', 'BAR_BAR', 5, BAR_BAR_TOKEN, isOperator: true); 216 '||', 'BAR_BAR', LOGICAL_OR_PRECEDENCE, BAR_BAR_TOKEN,
252
253 const PrecedenceInfo AMPERSAND_AMPERSAND_INFO = const PrecedenceInfo(
254 '&&', 'AMPERSAND_AMPERSAND', 6, AMPERSAND_AMPERSAND_TOKEN,
255 isOperator: true); 217 isOperator: true);
256 218
257 const PrecedenceInfo BAR_INFO = const PrecedenceInfo('|', 'BAR', 9, BAR_TOKEN, 219 const PrecedenceInfo AMPERSAND_AMPERSAND_INFO = const PrecedenceInfo('&&',
220 'AMPERSAND_AMPERSAND', LOGICAL_AND_PRECEDENCE, AMPERSAND_AMPERSAND_TOKEN,
221 isOperator: true);
222
223 const PrecedenceInfo BAR_INFO = const PrecedenceInfo(
224 '|', 'BAR', BITWISE_OR_PRECEDENCE, BAR_TOKEN,
258 isOperator: true, isUserDefinableOperator: true); 225 isOperator: true, isUserDefinableOperator: true);
259 226
260 const PrecedenceInfo CARET_INFO = const PrecedenceInfo( 227 const PrecedenceInfo CARET_INFO = const PrecedenceInfo(
261 '^', 'CARET', 10, CARET_TOKEN, 228 '^', 'CARET', BITWISE_XOR_PRECEDENCE, CARET_TOKEN,
262 isOperator: true, isUserDefinableOperator: true); 229 isOperator: true, isUserDefinableOperator: true);
263 230
264 const PrecedenceInfo AMPERSAND_INFO = const PrecedenceInfo( 231 const PrecedenceInfo AMPERSAND_INFO = const PrecedenceInfo(
265 '&', 'AMPERSAND', 11, AMPERSAND_TOKEN, 232 '&', 'AMPERSAND', BITWISE_AND_PRECEDENCE, AMPERSAND_TOKEN,
266 isOperator: true, isUserDefinableOperator: true); 233 isOperator: true, isUserDefinableOperator: true);
267 234
268 // Equality operators. 235 // Equality operators.
269 const int EQUALITY_PRECEDENCE = 7;
270 const PrecedenceInfo BANG_EQ_EQ_INFO = const PrecedenceInfo( 236 const PrecedenceInfo BANG_EQ_EQ_INFO = const PrecedenceInfo(
271 '!==', 'BANG_EQ_EQ', EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN); 237 '!==', 'BANG_EQ_EQ', EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN);
272 const PrecedenceInfo BANG_EQ_INFO = const PrecedenceInfo( 238 const PrecedenceInfo BANG_EQ_INFO = const PrecedenceInfo(
273 '!=', 'BANG_EQ', EQUALITY_PRECEDENCE, BANG_EQ_TOKEN, 239 '!=', 'BANG_EQ', EQUALITY_PRECEDENCE, BANG_EQ_TOKEN,
274 isOperator: true); 240 isOperator: true);
275 const PrecedenceInfo EQ_EQ_EQ_INFO = const PrecedenceInfo( 241 const PrecedenceInfo EQ_EQ_EQ_INFO = const PrecedenceInfo(
276 '===', 'EQ_EQ_EQ', EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN); 242 '===', 'EQ_EQ_EQ', EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN);
277 const PrecedenceInfo EQ_EQ_INFO = const PrecedenceInfo( 243 const PrecedenceInfo EQ_EQ_INFO = const PrecedenceInfo(
278 '==', 'EQ_EQ', EQUALITY_PRECEDENCE, EQ_EQ_TOKEN, 244 '==', 'EQ_EQ', EQUALITY_PRECEDENCE, EQ_EQ_TOKEN,
279 isOperator: true, isUserDefinableOperator: true); 245 isOperator: true, isUserDefinableOperator: true);
280 246
281 // Relational operators. 247 // Relational operators.
282 const int RELATIONAL_PRECEDENCE = 8;
283 const PrecedenceInfo GT_EQ_INFO = const PrecedenceInfo( 248 const PrecedenceInfo GT_EQ_INFO = const PrecedenceInfo(
284 '>=', 'GT_EQ', RELATIONAL_PRECEDENCE, GT_EQ_TOKEN, 249 '>=', 'GT_EQ', RELATIONAL_PRECEDENCE, GT_EQ_TOKEN,
285 isOperator: true, isUserDefinableOperator: true); 250 isOperator: true, isUserDefinableOperator: true);
286 const PrecedenceInfo GT_INFO = const PrecedenceInfo( 251 const PrecedenceInfo GT_INFO = const PrecedenceInfo(
287 '>', 'GT', RELATIONAL_PRECEDENCE, GT_TOKEN, 252 '>', 'GT', RELATIONAL_PRECEDENCE, GT_TOKEN,
288 isOperator: true, isUserDefinableOperator: true); 253 isOperator: true, isUserDefinableOperator: true);
289 const PrecedenceInfo IS_INFO = 254 const PrecedenceInfo IS_INFO =
290 const PrecedenceInfo('is', 'IS', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); 255 const PrecedenceInfo('is', 'IS', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
291 const PrecedenceInfo AS_INFO = 256 const PrecedenceInfo AS_INFO =
292 const PrecedenceInfo('as', 'AS', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN); 257 const PrecedenceInfo('as', 'AS', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
293 const PrecedenceInfo LT_EQ_INFO = const PrecedenceInfo( 258 const PrecedenceInfo LT_EQ_INFO = const PrecedenceInfo(
294 '<=', 'LT_EQ', RELATIONAL_PRECEDENCE, LT_EQ_TOKEN, 259 '<=', 'LT_EQ', RELATIONAL_PRECEDENCE, LT_EQ_TOKEN,
295 isOperator: true, isUserDefinableOperator: true); 260 isOperator: true, isUserDefinableOperator: true);
296 const PrecedenceInfo LT_INFO = const PrecedenceInfo( 261 const PrecedenceInfo LT_INFO = const PrecedenceInfo(
297 '<', 'LT', RELATIONAL_PRECEDENCE, LT_TOKEN, 262 '<', 'LT', RELATIONAL_PRECEDENCE, LT_TOKEN,
298 isOperator: true, isUserDefinableOperator: true); 263 isOperator: true, isUserDefinableOperator: true);
299 264
300 // Shift operators. 265 // Shift operators.
301 const int SHIFT_PRECEDENCE = 12;
302 const PrecedenceInfo GT_GT_INFO = const PrecedenceInfo( 266 const PrecedenceInfo GT_GT_INFO = const PrecedenceInfo(
303 '>>', 'GT_GT', SHIFT_PRECEDENCE, GT_GT_TOKEN, 267 '>>', 'GT_GT', SHIFT_PRECEDENCE, GT_GT_TOKEN,
304 isOperator: true, isUserDefinableOperator: true); 268 isOperator: true, isUserDefinableOperator: true);
305 const PrecedenceInfo LT_LT_INFO = const PrecedenceInfo( 269 const PrecedenceInfo LT_LT_INFO = const PrecedenceInfo(
306 '<<', 'LT_LT', SHIFT_PRECEDENCE, LT_LT_TOKEN, 270 '<<', 'LT_LT', SHIFT_PRECEDENCE, LT_LT_TOKEN,
307 isOperator: true, isUserDefinableOperator: true); 271 isOperator: true, isUserDefinableOperator: true);
308 272
309 // Additive operators. 273 // Additive operators.
310 const int ADDITIVE_PRECEDENCE = 13;
311 const PrecedenceInfo MINUS_INFO = const PrecedenceInfo( 274 const PrecedenceInfo MINUS_INFO = const PrecedenceInfo(
312 '-', 'MINUS', ADDITIVE_PRECEDENCE, MINUS_TOKEN, 275 '-', 'MINUS', ADDITIVE_PRECEDENCE, MINUS_TOKEN,
313 isOperator: true, isUserDefinableOperator: true); 276 isOperator: true, isUserDefinableOperator: true);
314 const PrecedenceInfo PLUS_INFO = const PrecedenceInfo( 277 const PrecedenceInfo PLUS_INFO = const PrecedenceInfo(
315 '+', 'PLUS', ADDITIVE_PRECEDENCE, PLUS_TOKEN, 278 '+', 'PLUS', ADDITIVE_PRECEDENCE, PLUS_TOKEN,
316 isOperator: true, isUserDefinableOperator: true); 279 isOperator: true, isUserDefinableOperator: true);
317 280
318 // Multiplicative operators. 281 // Multiplicative operators.
319 const int MULTIPLICATIVE_PRECEDENCE = 14;
320 const PrecedenceInfo PERCENT_INFO = const PrecedenceInfo( 282 const PrecedenceInfo PERCENT_INFO = const PrecedenceInfo(
321 '%', 'PERCENT', MULTIPLICATIVE_PRECEDENCE, PERCENT_TOKEN, 283 '%', 'PERCENT', MULTIPLICATIVE_PRECEDENCE, PERCENT_TOKEN,
322 isOperator: true, isUserDefinableOperator: true); 284 isOperator: true, isUserDefinableOperator: true);
323 const PrecedenceInfo SLASH_INFO = const PrecedenceInfo( 285 const PrecedenceInfo SLASH_INFO = const PrecedenceInfo(
324 '/', 'SLASH', MULTIPLICATIVE_PRECEDENCE, SLASH_TOKEN, 286 '/', 'SLASH', MULTIPLICATIVE_PRECEDENCE, SLASH_TOKEN,
325 isOperator: true, isUserDefinableOperator: true); 287 isOperator: true, isUserDefinableOperator: true);
326 const PrecedenceInfo STAR_INFO = const PrecedenceInfo( 288 const PrecedenceInfo STAR_INFO = const PrecedenceInfo(
327 '*', 'STAR', MULTIPLICATIVE_PRECEDENCE, STAR_TOKEN, 289 '*', 'STAR', MULTIPLICATIVE_PRECEDENCE, STAR_TOKEN,
328 isOperator: true, isUserDefinableOperator: true); 290 isOperator: true, isUserDefinableOperator: true);
329 const PrecedenceInfo TILDE_SLASH_INFO = const PrecedenceInfo( 291 const PrecedenceInfo TILDE_SLASH_INFO = const PrecedenceInfo(
330 '~/', 'TILDE_SLASH', MULTIPLICATIVE_PRECEDENCE, TILDE_SLASH_TOKEN, 292 '~/', 'TILDE_SLASH', MULTIPLICATIVE_PRECEDENCE, TILDE_SLASH_TOKEN,
331 isOperator: true, isUserDefinableOperator: true); 293 isOperator: true, isUserDefinableOperator: true);
332 294
333 const int POSTFIX_PRECEDENCE = 16;
334 const PrecedenceInfo PERIOD_INFO = 295 const PrecedenceInfo PERIOD_INFO =
335 const PrecedenceInfo('.', 'PERIOD', POSTFIX_PRECEDENCE, PERIOD_TOKEN); 296 const PrecedenceInfo('.', 'PERIOD', POSTFIX_PRECEDENCE, PERIOD_TOKEN);
336 const PrecedenceInfo QUESTION_PERIOD_INFO = const PrecedenceInfo( 297 const PrecedenceInfo QUESTION_PERIOD_INFO = const PrecedenceInfo(
337 '?.', 'QUESTION_PERIOD', POSTFIX_PRECEDENCE, QUESTION_PERIOD_TOKEN, 298 '?.', 'QUESTION_PERIOD', POSTFIX_PRECEDENCE, QUESTION_PERIOD_TOKEN,
338 isOperator: true); 299 isOperator: true);
339 300
340 const PrecedenceInfo KEYWORD_INFO = 301 const PrecedenceInfo KEYWORD_INFO =
341 const PrecedenceInfo('keyword', 'KEYWORD', 0, KEYWORD_TOKEN); 302 const PrecedenceInfo('keyword', 'KEYWORD', NO_PRECEDENCE, KEYWORD_TOKEN);
342 303
343 const PrecedenceInfo EOF_INFO = const PrecedenceInfo('', 'EOF', 0, EOF_TOKEN); 304 const PrecedenceInfo EOF_INFO =
305 const PrecedenceInfo('', 'EOF', NO_PRECEDENCE, EOF_TOKEN);
344 306
345 /// Precedence info used by synthetic tokens that are created during parser 307 /// Precedence info used by synthetic tokens that are created during parser
346 /// recovery (non-analyzer use case). 308 /// recovery (non-analyzer use case).
347 const PrecedenceInfo RECOVERY_INFO = 309 const PrecedenceInfo RECOVERY_INFO =
348 const PrecedenceInfo('recovery', 'RECOVERY', 0, RECOVERY_TOKEN); 310 const PrecedenceInfo('recovery', 'RECOVERY', NO_PRECEDENCE, RECOVERY_TOKEN);
349 311
350 const PrecedenceInfo IDENTIFIER_INFO = 312 const PrecedenceInfo IDENTIFIER_INFO = const PrecedenceInfo(
351 const PrecedenceInfo('identifier', 'STRING_INT', 0, IDENTIFIER_TOKEN); 313 'identifier', 'STRING_INT', NO_PRECEDENCE, IDENTIFIER_TOKEN);
352 314
353 const PrecedenceInfo SCRIPT_INFO = 315 const PrecedenceInfo SCRIPT_INFO =
354 const PrecedenceInfo('script', 'SCRIPT_TAG', 0, SCRIPT_TOKEN); 316 const PrecedenceInfo('script', 'SCRIPT_TAG', NO_PRECEDENCE, SCRIPT_TOKEN);
355 317
356 const PrecedenceInfo BAD_INPUT_INFO = 318 const PrecedenceInfo BAD_INPUT_INFO = const PrecedenceInfo(
357 const PrecedenceInfo('malformed input', 'BAD_INPUT', 0, BAD_INPUT_TOKEN); 319 'malformed input', 'BAD_INPUT', NO_PRECEDENCE, BAD_INPUT_TOKEN);
358 320
359 const PrecedenceInfo OPEN_PAREN_INFO = const PrecedenceInfo( 321 const PrecedenceInfo OPEN_PAREN_INFO = const PrecedenceInfo(
360 '(', 'OPEN_PAREN', POSTFIX_PRECEDENCE, OPEN_PAREN_TOKEN); 322 '(', 'OPEN_PAREN', POSTFIX_PRECEDENCE, OPEN_PAREN_TOKEN);
361 323
362 const PrecedenceInfo CLOSE_PAREN_INFO = 324 const PrecedenceInfo CLOSE_PAREN_INFO =
363 const PrecedenceInfo(')', 'CLOSE_PAREN', 0, CLOSE_PAREN_TOKEN); 325 const PrecedenceInfo(')', 'CLOSE_PAREN', NO_PRECEDENCE, CLOSE_PAREN_TOKEN);
364 326
365 const PrecedenceInfo OPEN_CURLY_BRACKET_INFO = const PrecedenceInfo( 327 const PrecedenceInfo OPEN_CURLY_BRACKET_INFO = const PrecedenceInfo(
366 '{', 'OPEN_CURLY_BRACKET', 0, OPEN_CURLY_BRACKET_TOKEN); 328 '{', 'OPEN_CURLY_BRACKET', NO_PRECEDENCE, OPEN_CURLY_BRACKET_TOKEN);
367 329
368 const PrecedenceInfo CLOSE_CURLY_BRACKET_INFO = const PrecedenceInfo( 330 const PrecedenceInfo CLOSE_CURLY_BRACKET_INFO = const PrecedenceInfo(
369 '}', 'CLOSE_CURLY_BRACKET', 0, CLOSE_CURLY_BRACKET_TOKEN); 331 '}', 'CLOSE_CURLY_BRACKET', NO_PRECEDENCE, CLOSE_CURLY_BRACKET_TOKEN);
370 332
371 const PrecedenceInfo INT_INFO = 333 const PrecedenceInfo INT_INFO =
372 const PrecedenceInfo('int', 'INT', 0, INT_TOKEN); 334 const PrecedenceInfo('int', 'INT', NO_PRECEDENCE, INT_TOKEN);
373 335
374 const PrecedenceInfo STRING_INFO = 336 const PrecedenceInfo STRING_INFO =
375 const PrecedenceInfo('string', 'STRING', 0, STRING_TOKEN); 337 const PrecedenceInfo('string', 'STRING', NO_PRECEDENCE, STRING_TOKEN);
376 338
377 const PrecedenceInfo OPEN_SQUARE_BRACKET_INFO = const PrecedenceInfo( 339 const PrecedenceInfo OPEN_SQUARE_BRACKET_INFO = const PrecedenceInfo(
378 '[', 'OPEN_SQUARE_BRACKET', POSTFIX_PRECEDENCE, OPEN_SQUARE_BRACKET_TOKEN); 340 '[', 'OPEN_SQUARE_BRACKET', POSTFIX_PRECEDENCE, OPEN_SQUARE_BRACKET_TOKEN);
379 341
380 const PrecedenceInfo CLOSE_SQUARE_BRACKET_INFO = const PrecedenceInfo( 342 const PrecedenceInfo CLOSE_SQUARE_BRACKET_INFO = const PrecedenceInfo(
381 ']', 'CLOSE_SQUARE_BRACKET', 0, CLOSE_SQUARE_BRACKET_TOKEN); 343 ']', 'CLOSE_SQUARE_BRACKET', NO_PRECEDENCE, CLOSE_SQUARE_BRACKET_TOKEN);
382 344
383 const PrecedenceInfo DOUBLE_INFO = 345 const PrecedenceInfo DOUBLE_INFO =
384 const PrecedenceInfo('double', 'DOUBLE', 0, DOUBLE_TOKEN); 346 const PrecedenceInfo('double', 'DOUBLE', NO_PRECEDENCE, DOUBLE_TOKEN);
385 347
386 const PrecedenceInfo STRING_INTERPOLATION_INFO = const PrecedenceInfo( 348 const PrecedenceInfo STRING_INTERPOLATION_INFO = const PrecedenceInfo(
387 '\${', 'STRING_INTERPOLATION_EXPRESSION', 0, STRING_INTERPOLATION_TOKEN); 349 '\${',
350 'STRING_INTERPOLATION_EXPRESSION',
351 NO_PRECEDENCE,
352 STRING_INTERPOLATION_TOKEN);
388 353
389 const PrecedenceInfo STRING_INTERPOLATION_IDENTIFIER_INFO = 354 const PrecedenceInfo STRING_INTERPOLATION_IDENTIFIER_INFO =
390 const PrecedenceInfo('\$', 'STRING_INTERPOLATION_IDENTIFIER', 0, 355 const PrecedenceInfo('\$', 'STRING_INTERPOLATION_IDENTIFIER', NO_PRECEDENCE,
391 STRING_INTERPOLATION_IDENTIFIER_TOKEN); 356 STRING_INTERPOLATION_IDENTIFIER_TOKEN);
392 357
393 const PrecedenceInfo HEXADECIMAL_INFO = 358 const PrecedenceInfo HEXADECIMAL_INFO = const PrecedenceInfo(
394 const PrecedenceInfo('hexadecimal', 'HEXADECIMAL', 0, HEXADECIMAL_TOKEN); 359 'hexadecimal', 'HEXADECIMAL', NO_PRECEDENCE, HEXADECIMAL_TOKEN);
395 360
396 const PrecedenceInfo SINGLE_LINE_COMMENT_INFO = 361 const PrecedenceInfo SINGLE_LINE_COMMENT_INFO = const PrecedenceInfo(
397 const PrecedenceInfo('comment', 'SINGLE_LINE_COMMENT', 0, COMMENT_TOKEN); 362 'comment', 'SINGLE_LINE_COMMENT', NO_PRECEDENCE, COMMENT_TOKEN);
398 363
399 const PrecedenceInfo MULTI_LINE_COMMENT_INFO = 364 const PrecedenceInfo MULTI_LINE_COMMENT_INFO = const PrecedenceInfo(
400 const PrecedenceInfo('comment', 'MULTI_LINE_COMMENT', 0, COMMENT_TOKEN); 365 'comment', 'MULTI_LINE_COMMENT', NO_PRECEDENCE, COMMENT_TOKEN);
401 366
402 const PrecedenceInfo GENERIC_METHOD_TYPE_ASSIGN = const PrecedenceInfo( 367 const PrecedenceInfo GENERIC_METHOD_TYPE_ASSIGN = const PrecedenceInfo(
403 'generic_comment_assign', 368 'generic_comment_assign',
404 'GENERIC_METHOD_TYPE_ASSIGN', 369 'GENERIC_METHOD_TYPE_ASSIGN',
405 0, 370 NO_PRECEDENCE,
406 GENERIC_METHOD_TYPE_ASSIGN_TOKEN); 371 GENERIC_METHOD_TYPE_ASSIGN_TOKEN);
407 372
408 const PrecedenceInfo GENERIC_METHOD_TYPE_LIST = const PrecedenceInfo( 373 const PrecedenceInfo GENERIC_METHOD_TYPE_LIST = const PrecedenceInfo(
409 'generic_comment_list', 374 'generic_comment_list',
410 'GENERIC_METHOD_TYPE_LIST', 375 'GENERIC_METHOD_TYPE_LIST',
411 0, 376 NO_PRECEDENCE,
412 GENERIC_METHOD_TYPE_LIST_TOKEN); 377 GENERIC_METHOD_TYPE_LIST_TOKEN);
OLDNEW
« no previous file with comments | « no previous file | pkg/front_end/lib/src/scanner/token.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698