| OLD | NEW |
| (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); | |
| OLD | NEW |