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

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

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

Powered by Google App Engine
This is Rietveld 408576698