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

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

Issue 2832403002: merge PrecedenceInfo into TokenType and update all refs (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
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library fasta.scanner.precedence;
6
7 import '../../scanner/token.dart';
8 import '../../scanner/token.dart' as analyzer;
9 import 'token_constants.dart';
10
11 const int NO_PRECEDENCE = analyzer.NO_PRECEDENCE;
12 const int ASSIGNMENT_PRECEDENCE = analyzer.ASSIGNMENT_PRECEDENCE;
13 const int CASCADE_PRECEDENCE = analyzer.CASCADE_PRECEDENCE;
14 const int CONDITIONAL_PRECEDENCE = analyzer.CONDITIONAL_PRECEDENCE;
15 const int IF_NULL_PRECEDENCE = analyzer.IF_NULL_PRECEDENCE;
16 const int LOGICAL_OR_PRECEDENCE = analyzer.LOGICAL_OR_PRECEDENCE;
17 const int LOGICAL_AND_PRECEDENCE = analyzer.LOGICAL_AND_PRECEDENCE;
18 const int EQUALITY_PRECEDENCE = analyzer.EQUALITY_PRECEDENCE;
19 const int RELATIONAL_PRECEDENCE = analyzer.RELATIONAL_PRECEDENCE;
20 const int BITWISE_OR_PRECEDENCE = analyzer.BITWISE_OR_PRECEDENCE;
21 const int BITWISE_XOR_PRECEDENCE = analyzer.BITWISE_XOR_PRECEDENCE;
22 const int BITWISE_AND_PRECEDENCE = analyzer.BITWISE_AND_PRECEDENCE;
23 const int SHIFT_PRECEDENCE = analyzer.SHIFT_PRECEDENCE;
24 const int ADDITIVE_PRECEDENCE = analyzer.ADDITIVE_PRECEDENCE;
25 const int MULTIPLICATIVE_PRECEDENCE = analyzer.MULTIPLICATIVE_PRECEDENCE;
26 const int PREFIX_PRECEDENCE = analyzer.PREFIX_PRECEDENCE;
27 const int POSTFIX_PRECEDENCE = analyzer.POSTFIX_PRECEDENCE;
28
29 // TODO(ahe): The following are not tokens in Dart.
30 const TokenType BACKPING_INFO =
31 const TokenType('`', 'BACKPING', NO_PRECEDENCE, BACKPING_TOKEN);
32 const TokenType BACKSLASH_INFO =
33 const TokenType('\\', 'BACKSLASH', NO_PRECEDENCE, BACKSLASH_TOKEN);
34 const TokenType PERIOD_PERIOD_PERIOD_INFO = const TokenType(
35 '...', 'PERIOD_PERIOD_PERIOD', NO_PRECEDENCE, PERIOD_PERIOD_PERIOD_TOKEN);
36
37 /**
38 * The cascade operator has the lowest precedence of any operator
39 * except assignment.
40 */
41 const TokenType PERIOD_PERIOD_INFO = const TokenType(
42 '..', 'PERIOD_PERIOD', CASCADE_PRECEDENCE, PERIOD_PERIOD_TOKEN,
43 isOperator: true);
44
45 const TokenType BANG_INFO = const TokenType(
46 '!', 'BANG', PREFIX_PRECEDENCE, BANG_TOKEN,
47 isOperator: true);
48 const TokenType COLON_INFO =
49 const TokenType(':', 'COLON', NO_PRECEDENCE, COLON_TOKEN);
50 const TokenType INDEX_INFO = const TokenType(
51 '[]', 'INDEX', NO_PRECEDENCE, INDEX_TOKEN,
52 isOperator: true, isUserDefinableOperator: true);
53 const TokenType MINUS_MINUS_INFO = const TokenType(
54 '--', 'MINUS_MINUS', POSTFIX_PRECEDENCE, MINUS_MINUS_TOKEN,
55 isOperator: true);
56 const TokenType PLUS_PLUS_INFO = const TokenType(
57 '++', 'PLUS_PLUS', POSTFIX_PRECEDENCE, PLUS_PLUS_TOKEN,
58 isOperator: true);
59 const TokenType TILDE_INFO = const TokenType(
60 '~', 'TILDE', PREFIX_PRECEDENCE, TILDE_TOKEN,
61 isOperator: true, isUserDefinableOperator: true);
62
63 const TokenType FUNCTION_INFO =
64 const TokenType('=>', 'FUNCTION', NO_PRECEDENCE, FUNCTION_TOKEN);
65 const TokenType HASH_INFO =
66 const TokenType('#', 'HASH', NO_PRECEDENCE, HASH_TOKEN);
67 const TokenType INDEX_EQ_INFO = const TokenType(
68 '[]=', 'INDEX_EQ', NO_PRECEDENCE, INDEX_EQ_TOKEN,
69 isOperator: true, isUserDefinableOperator: true);
70 const TokenType SEMICOLON_INFO =
71 const TokenType(';', 'SEMICOLON', NO_PRECEDENCE, SEMICOLON_TOKEN);
72 const TokenType COMMA_INFO =
73 const TokenType(',', 'COMMA', NO_PRECEDENCE, COMMA_TOKEN);
74
75 const TokenType AT_INFO = const TokenType('@', 'AT', NO_PRECEDENCE, AT_TOKEN);
76
77 // Assignment operators.
78 const TokenType AMPERSAND_EQ_INFO = const TokenType(
79 '&=', 'AMPERSAND_EQ', ASSIGNMENT_PRECEDENCE, AMPERSAND_EQ_TOKEN,
80 isOperator: true);
81 const TokenType BAR_EQ_INFO = const TokenType(
82 '|=', 'BAR_EQ', ASSIGNMENT_PRECEDENCE, BAR_EQ_TOKEN,
83 isOperator: true);
84 const TokenType CARET_EQ_INFO = const TokenType(
85 '^=', 'CARET_EQ', ASSIGNMENT_PRECEDENCE, CARET_EQ_TOKEN,
86 isOperator: true);
87 const TokenType EQ_INFO = const TokenType(
88 '=', 'EQ', ASSIGNMENT_PRECEDENCE, EQ_TOKEN,
89 isOperator: true);
90 const TokenType GT_GT_EQ_INFO = const TokenType(
91 '>>=', 'GT_GT_EQ', ASSIGNMENT_PRECEDENCE, GT_GT_EQ_TOKEN,
92 isOperator: true);
93 const TokenType LT_LT_EQ_INFO = const TokenType(
94 '<<=', 'LT_LT_EQ', ASSIGNMENT_PRECEDENCE, LT_LT_EQ_TOKEN,
95 isOperator: true);
96 const TokenType MINUS_EQ_INFO = const TokenType(
97 '-=', 'MINUS_EQ', ASSIGNMENT_PRECEDENCE, MINUS_EQ_TOKEN,
98 isOperator: true);
99 const TokenType PERCENT_EQ_INFO = const TokenType(
100 '%=', 'PERCENT_EQ', ASSIGNMENT_PRECEDENCE, PERCENT_EQ_TOKEN,
101 isOperator: true);
102 const TokenType PLUS_EQ_INFO = const TokenType(
103 '+=', 'PLUS_EQ', ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN,
104 isOperator: true);
105 const TokenType SLASH_EQ_INFO = const TokenType(
106 '/=', 'SLASH_EQ', ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN,
107 isOperator: true);
108 const TokenType STAR_EQ_INFO = const TokenType(
109 '*=', 'STAR_EQ', ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN,
110 isOperator: true);
111 const TokenType TILDE_SLASH_EQ_INFO = const TokenType(
112 '~/=', 'TILDE_SLASH_EQ', ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN,
113 isOperator: true);
114 const TokenType QUESTION_QUESTION_EQ_INFO = const TokenType('??=',
115 'QUESTION_QUESTION_EQ', ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN,
116 isOperator: true);
117
118 const TokenType QUESTION_INFO = const TokenType(
119 '?', 'QUESTION', CONDITIONAL_PRECEDENCE, QUESTION_TOKEN,
120 isOperator: true);
121
122 const TokenType QUESTION_QUESTION_INFO = const TokenType(
123 '??', 'QUESTION_QUESTION', IF_NULL_PRECEDENCE, QUESTION_QUESTION_TOKEN,
124 isOperator: true);
125
126 const TokenType BAR_BAR_INFO = const TokenType(
127 '||', 'BAR_BAR', LOGICAL_OR_PRECEDENCE, BAR_BAR_TOKEN,
128 isOperator: true);
129
130 const TokenType AMPERSAND_AMPERSAND_INFO = const TokenType('&&',
131 'AMPERSAND_AMPERSAND', LOGICAL_AND_PRECEDENCE, AMPERSAND_AMPERSAND_TOKEN,
132 isOperator: true);
133
134 const TokenType BAR_INFO = const TokenType(
135 '|', 'BAR', BITWISE_OR_PRECEDENCE, BAR_TOKEN,
136 isOperator: true, isUserDefinableOperator: true);
137
138 const TokenType CARET_INFO = const TokenType(
139 '^', 'CARET', BITWISE_XOR_PRECEDENCE, CARET_TOKEN,
140 isOperator: true, isUserDefinableOperator: true);
141
142 const TokenType AMPERSAND_INFO = const TokenType(
143 '&', 'AMPERSAND', BITWISE_AND_PRECEDENCE, AMPERSAND_TOKEN,
144 isOperator: true, isUserDefinableOperator: true);
145
146 // Equality operators.
147 const TokenType BANG_EQ_EQ_INFO =
148 const TokenType('!==', 'BANG_EQ_EQ', EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN);
149 const TokenType BANG_EQ_INFO = const TokenType(
150 '!=', 'BANG_EQ', EQUALITY_PRECEDENCE, BANG_EQ_TOKEN,
151 isOperator: true);
152 const TokenType EQ_EQ_EQ_INFO =
153 const TokenType('===', 'EQ_EQ_EQ', EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN);
154 const TokenType EQ_EQ_INFO = const TokenType(
155 '==', 'EQ_EQ', EQUALITY_PRECEDENCE, EQ_EQ_TOKEN,
156 isOperator: true, isUserDefinableOperator: true);
157
158 // Relational operators.
159 const TokenType GT_EQ_INFO = const TokenType(
160 '>=', 'GT_EQ', RELATIONAL_PRECEDENCE, GT_EQ_TOKEN,
161 isOperator: true, isUserDefinableOperator: true);
162 const TokenType GT_INFO = const TokenType(
163 '>', 'GT', RELATIONAL_PRECEDENCE, GT_TOKEN,
164 isOperator: true, isUserDefinableOperator: true);
165 const TokenType IS_INFO =
166 const TokenType('is', 'IS', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
167 const TokenType AS_INFO =
168 const TokenType('as', 'AS', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
169 const TokenType LT_EQ_INFO = const TokenType(
170 '<=', 'LT_EQ', RELATIONAL_PRECEDENCE, LT_EQ_TOKEN,
171 isOperator: true, isUserDefinableOperator: true);
172 const TokenType LT_INFO = const TokenType(
173 '<', 'LT', RELATIONAL_PRECEDENCE, LT_TOKEN,
174 isOperator: true, isUserDefinableOperator: true);
175
176 // Shift operators.
177 const TokenType GT_GT_INFO = const TokenType(
178 '>>', 'GT_GT', SHIFT_PRECEDENCE, GT_GT_TOKEN,
179 isOperator: true, isUserDefinableOperator: true);
180 const TokenType LT_LT_INFO = const TokenType(
181 '<<', 'LT_LT', SHIFT_PRECEDENCE, LT_LT_TOKEN,
182 isOperator: true, isUserDefinableOperator: true);
183
184 // Additive operators.
185 const TokenType MINUS_INFO = const TokenType(
186 '-', 'MINUS', ADDITIVE_PRECEDENCE, MINUS_TOKEN,
187 isOperator: true, isUserDefinableOperator: true);
188 const TokenType PLUS_INFO = const TokenType(
189 '+', 'PLUS', ADDITIVE_PRECEDENCE, PLUS_TOKEN,
190 isOperator: true, isUserDefinableOperator: true);
191
192 // Multiplicative operators.
193 const TokenType PERCENT_INFO = const TokenType(
194 '%', 'PERCENT', MULTIPLICATIVE_PRECEDENCE, PERCENT_TOKEN,
195 isOperator: true, isUserDefinableOperator: true);
196 const TokenType SLASH_INFO = const TokenType(
197 '/', 'SLASH', MULTIPLICATIVE_PRECEDENCE, SLASH_TOKEN,
198 isOperator: true, isUserDefinableOperator: true);
199 const TokenType STAR_INFO = const TokenType(
200 '*', 'STAR', MULTIPLICATIVE_PRECEDENCE, STAR_TOKEN,
201 isOperator: true, isUserDefinableOperator: true);
202 const TokenType TILDE_SLASH_INFO = const TokenType(
203 '~/', 'TILDE_SLASH', MULTIPLICATIVE_PRECEDENCE, TILDE_SLASH_TOKEN,
204 isOperator: true, isUserDefinableOperator: true);
205
206 const TokenType PERIOD_INFO =
207 const TokenType('.', 'PERIOD', POSTFIX_PRECEDENCE, PERIOD_TOKEN);
208 const TokenType QUESTION_PERIOD_INFO = const TokenType(
209 '?.', 'QUESTION_PERIOD', POSTFIX_PRECEDENCE, QUESTION_PERIOD_TOKEN,
210 isOperator: true);
211
212 const TokenType KEYWORD_INFO =
213 const TokenType('keyword', 'KEYWORD', NO_PRECEDENCE, KEYWORD_TOKEN);
214
215 const TokenType EOF_INFO = const TokenType('', 'EOF', NO_PRECEDENCE, EOF_TOKEN);
216
217 /// Precedence info used by synthetic tokens that are created during parser
218 /// recovery (non-analyzer use case).
219 const TokenType RECOVERY_INFO =
220 const TokenType('recovery', 'RECOVERY', NO_PRECEDENCE, RECOVERY_TOKEN);
221
222 const TokenType IDENTIFIER_INFO = const TokenType(
223 'identifier', 'STRING_INT', NO_PRECEDENCE, IDENTIFIER_TOKEN);
224
225 const TokenType SCRIPT_INFO =
226 const TokenType('script', 'SCRIPT_TAG', NO_PRECEDENCE, SCRIPT_TOKEN);
227
228 const TokenType BAD_INPUT_INFO = const TokenType(
229 'malformed input', 'BAD_INPUT', NO_PRECEDENCE, BAD_INPUT_TOKEN);
230
231 const TokenType OPEN_PAREN_INFO =
232 const TokenType('(', 'OPEN_PAREN', POSTFIX_PRECEDENCE, OPEN_PAREN_TOKEN);
233
234 const TokenType CLOSE_PAREN_INFO =
235 const TokenType(')', 'CLOSE_PAREN', NO_PRECEDENCE, CLOSE_PAREN_TOKEN);
236
237 const TokenType OPEN_CURLY_BRACKET_INFO = const TokenType(
238 '{', 'OPEN_CURLY_BRACKET', NO_PRECEDENCE, OPEN_CURLY_BRACKET_TOKEN);
239
240 const TokenType CLOSE_CURLY_BRACKET_INFO = const TokenType(
241 '}', 'CLOSE_CURLY_BRACKET', NO_PRECEDENCE, CLOSE_CURLY_BRACKET_TOKEN);
242
243 const TokenType INT_INFO =
244 const TokenType('int', 'INT', NO_PRECEDENCE, INT_TOKEN);
245
246 const TokenType STRING_INFO =
247 const TokenType('string', 'STRING', NO_PRECEDENCE, STRING_TOKEN);
248
249 const TokenType OPEN_SQUARE_BRACKET_INFO = const TokenType(
250 '[', 'OPEN_SQUARE_BRACKET', POSTFIX_PRECEDENCE, OPEN_SQUARE_BRACKET_TOKEN);
251
252 const TokenType CLOSE_SQUARE_BRACKET_INFO = const TokenType(
253 ']', 'CLOSE_SQUARE_BRACKET', NO_PRECEDENCE, CLOSE_SQUARE_BRACKET_TOKEN);
254
255 const TokenType DOUBLE_INFO =
256 const TokenType('double', 'DOUBLE', NO_PRECEDENCE, DOUBLE_TOKEN);
257
258 const TokenType STRING_INTERPOLATION_INFO = const TokenType(
259 '\${',
260 'STRING_INTERPOLATION_EXPRESSION',
261 NO_PRECEDENCE,
262 STRING_INTERPOLATION_TOKEN);
263
264 const TokenType STRING_INTERPOLATION_IDENTIFIER_INFO = const TokenType(
265 '\$',
266 'STRING_INTERPOLATION_IDENTIFIER',
267 NO_PRECEDENCE,
268 STRING_INTERPOLATION_IDENTIFIER_TOKEN);
269
270 const TokenType HEXADECIMAL_INFO = const TokenType(
271 'hexadecimal', 'HEXADECIMAL', NO_PRECEDENCE, HEXADECIMAL_TOKEN);
272
273 const TokenType SINGLE_LINE_COMMENT_INFO = const TokenType(
274 'comment', 'SINGLE_LINE_COMMENT', NO_PRECEDENCE, COMMENT_TOKEN);
275
276 const TokenType MULTI_LINE_COMMENT_INFO = const TokenType(
277 'comment', 'MULTI_LINE_COMMENT', NO_PRECEDENCE, COMMENT_TOKEN);
278
279 const TokenType GENERIC_METHOD_TYPE_ASSIGN = const TokenType(
280 'generic_comment_assign',
281 'GENERIC_METHOD_TYPE_ASSIGN',
282 NO_PRECEDENCE,
283 GENERIC_METHOD_TYPE_ASSIGN_TOKEN);
284
285 const TokenType GENERIC_METHOD_TYPE_LIST = const TokenType(
286 'generic_comment_list',
287 'GENERIC_METHOD_TYPE_LIST',
288 NO_PRECEDENCE,
289 GENERIC_METHOD_TYPE_LIST_TOKEN);
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/scanner/error_token.dart ('k') | pkg/front_end/lib/src/fasta/scanner/recover.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698