| OLD | NEW |
| (Empty) |
| 1 # Copyright (c) 2011, 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 class Token: | |
| 6 def __init__(self, name, text, precedence, customFinishCode=None, | |
| 7 stringRepr=None): | |
| 8 self.name = name | |
| 9 self.text = text | |
| 10 self.precedence = precedence | |
| 11 self.customFinishCode = customFinishCode | |
| 12 | |
| 13 if stringRepr is None: | |
| 14 if self.text: | |
| 15 stringRepr = self.text | |
| 16 elif self.name is not None: | |
| 17 stringRepr = self.name.lower().replace('_', ' ') | |
| 18 | |
| 19 self.stringRepr = stringRepr | |
| 20 | |
| 21 # roughly the user-definable operators | |
| 22 EXCLUDES = ['!=', '===', '!==', '&&', '||'] | |
| 23 INCLUDES = ['[]', '[]=', '~'] | |
| 24 if text in INCLUDES or (self.precedence >= 6 and text not in EXCLUDES): | |
| 25 self.methodName = ':' + name.lower() | |
| 26 else: | |
| 27 self.methodName = None | |
| 28 | |
| 29 def getFinishCode(self): | |
| 30 if self.customFinishCode: | |
| 31 return self.customFinishCode | |
| 32 else: | |
| 33 return '_finishToken(TokenKind.%s)' % self.name | |
| 34 | |
| 35 | |
| 36 class Keyword: | |
| 37 def __init__(self, name, text, isPseudo, precedence=0): | |
| 38 self.name = name | |
| 39 self.text = text | |
| 40 self.isPseudo = isPseudo | |
| 41 self.precedence = precedence | |
| 42 | |
| 43 if isPseudo: | |
| 44 prefix = 'pseudo-' | |
| 45 else: | |
| 46 prefix = '' | |
| 47 | |
| 48 self.stringRepr = '%skeyword %r' % (prefix, self.text) | |
| 49 | |
| 50 def __repr__(self): | |
| 51 return 'Keyword(%r)' % self.text | |
| 52 | |
| 53 | |
| 54 tokens = [ | |
| 55 Token('END_OF_FILE', "", 0), | |
| 56 | |
| 57 Token('LPAREN', "(", 0), | |
| 58 Token('RPAREN', ")", 0), | |
| 59 Token('LBRACK', "[", 0), | |
| 60 Token('RBRACK', "]", 0), | |
| 61 Token('LBRACE', "{", 0, '_finishOpenBrace()'), | |
| 62 Token('RBRACE', "}", 0, '_finishCloseBrace()'), | |
| 63 Token('COLON', ":", 0), | |
| 64 Token('ARROW', "=>", 0), | |
| 65 Token('SEMICOLON', ";", 0), | |
| 66 Token('COMMA', ",", 0), | |
| 67 Token('HASH', "#", 0), | |
| 68 Token('HASHBANG', "#!", 0, 'finishHashBang()'), | |
| 69 | |
| 70 Token('DOT', ".", 0, 'finishDot()'), | |
| 71 Token('ELLIPSIS', "...", 0), | |
| 72 Token('INCR', "++", 0), | |
| 73 Token('DECR', "--", 0), | |
| 74 | |
| 75 Token('BIT_NOT', "~", 0), | |
| 76 Token('NOT', "!", 0), | |
| 77 | |
| 78 # Assignment operators | |
| 79 Token('ASSIGN', "=", 2), | |
| 80 Token('ASSIGN_OR', "|=", 2), | |
| 81 Token('ASSIGN_XOR', "^=", 2), | |
| 82 Token('ASSIGN_AND', "&=", 2), | |
| 83 Token('ASSIGN_SHL', "<<=", 2), | |
| 84 Token('ASSIGN_SAR', ">>=", 2), | |
| 85 Token('ASSIGN_SHR', ">>>=", 2), | |
| 86 Token('ASSIGN_ADD', "+=", 2), | |
| 87 Token('ASSIGN_SUB', "-=", 2), | |
| 88 Token('ASSIGN_MUL', "*=", 2), | |
| 89 Token('ASSIGN_DIV', "/=", 2), | |
| 90 Token('ASSIGN_TRUNCDIV', "~/=", 2), | |
| 91 Token('ASSIGN_MOD', "%=", 2), | |
| 92 | |
| 93 Token('CONDITIONAL', "?", 3), | |
| 94 | |
| 95 Token('OR', "||", 4), | |
| 96 Token('AND', "&&", 5), | |
| 97 Token('BIT_OR', "|", 6), | |
| 98 Token('BIT_XOR', "^", 7), | |
| 99 Token('BIT_AND', "&", 8), | |
| 100 | |
| 101 # Shift operators | |
| 102 Token('SHL', "<<", 11), | |
| 103 Token('SAR', ">>", 11), | |
| 104 Token('SHR', ">>>", 11), | |
| 105 | |
| 106 # Additive operators | |
| 107 Token('ADD', "+", 12), | |
| 108 Token('SUB', "-", 12), | |
| 109 | |
| 110 # Multiplicative operators | |
| 111 Token('MUL', "*", 13), | |
| 112 Token('DIV', "/", 13), | |
| 113 Token('TRUNCDIV', "~/", 13), | |
| 114 Token('MOD', "%", 13), | |
| 115 | |
| 116 # Equality operators | |
| 117 Token('EQ', "==", 9), | |
| 118 Token('NE', "!=", 9), | |
| 119 Token('EQ_STRICT', "===", 9), | |
| 120 Token('NE_STRICT', "!==", 9), | |
| 121 | |
| 122 # Relational operators | |
| 123 Token('LT', "<", 10), | |
| 124 Token('GT', ">", 10), | |
| 125 Token('LTE', "<=", 10), | |
| 126 Token('GTE', ">=", 10), | |
| 127 | |
| 128 # Special tokens for index operator methods | |
| 129 Token('INDEX', "[]", 0), | |
| 130 Token('SETINDEX', "[]=", 0), | |
| 131 | |
| 132 | |
| 133 Token('STRING', "", 0), | |
| 134 Token('STRING_PART', "", 0), | |
| 135 Token('INTEGER', "", 0), | |
| 136 Token('HEX_INTEGER', "", 0), | |
| 137 Token('DOUBLE', "", 0), | |
| 138 | |
| 139 Token('WHITESPACE', "", 0), | |
| 140 Token('COMMENT', "", 0), | |
| 141 Token('ERROR', "", 0), | |
| 142 | |
| 143 Token('INCOMPLETE_STRING', "", 0), | |
| 144 Token('INCOMPLETE_COMMENT', "", 0), | |
| 145 Token('INCOMPLETE_MULTILINE_STRING_DQ', "", 0), | |
| 146 Token('INCOMPLETE_MULTILINE_STRING_SQ', "", 0), | |
| 147 | |
| 148 | |
| 149 Token(None, '//', 0, 'finishSingleLineComment()'), | |
| 150 Token(None, '/*', 0, 'finishMultiLineComment()'), | |
| 151 Token(None, '$"', 0, 'finishString(34/*"*/)'), | |
| 152 Token(None, '$\'', 0, 'finishString(39/*\'*/)'), | |
| 153 Token(None, '$', 0, 'finishIdentifier(36/*$*/)'), | |
| 154 Token(None, '@"', 0, 'finishRawString(34/*"*/)'), | |
| 155 Token(None, '@\'', 0, 'finishRawString(39/*\'*/)'), | |
| 156 Token(None, '"', 0, 'finishString(34/*"*/)'), | |
| 157 Token(None, '\'', 0, 'finishString(39/*\'*/)'), | |
| 158 Token(None, '0', 0, 'finishNumber()'), | |
| 159 Token(None, '0x', 0, 'finishHex()'), | |
| 160 Token(None, '0X', 0, 'finishHex()'), | |
| 161 | |
| 162 Token('IDENTIFIER', "", 0), # must be last | |
| 163 | |
| 164 ] | |
| 165 | |
| 166 # TODO(jimhug): Validate this list with Dart.g and with the lang spec. | |
| 167 keywords = [ | |
| 168 Keyword('ABSTRACT', "abstract", True), | |
| 169 Keyword('ASSERT', "assert", True), | |
| 170 Keyword('AWAIT', "await", False), # experimental feature | |
| 171 Keyword('BREAK', "break", False), | |
| 172 Keyword('CALL', "call", True), | |
| 173 Keyword('CASE', "case", False), | |
| 174 Keyword('CATCH', "catch", False), | |
| 175 Keyword('CLASS', "class", False), | |
| 176 Keyword('CONST', "const", False), | |
| 177 Keyword('CONTINUE', "continue", False), | |
| 178 Keyword('DEFAULT', "default", False), | |
| 179 Keyword('DO', "do", False), | |
| 180 Keyword('ELSE', "else", False), | |
| 181 Keyword('EXTENDS', "extends", False), | |
| 182 Keyword('FACTORY', "factory", True), | |
| 183 Keyword('FALSE', "false", False), | |
| 184 Keyword('FINAL', "final", False), | |
| 185 Keyword('FINALLY', "finally", False), | |
| 186 Keyword('FOR', "for", False), | |
| 187 Keyword('GET', "get", True), | |
| 188 Keyword('IF', "if", False), | |
| 189 Keyword('IMPLEMENTS', "implements", True), | |
| 190 Keyword('IMPORT', "import", True), | |
| 191 Keyword('IN', "in", False), | |
| 192 Keyword('INTERFACE', "interface", True), | |
| 193 Keyword('IS', "is", False, 10), | |
| 194 Keyword('LIBRARY', "library", True), | |
| 195 Keyword('NATIVE', "native", True), | |
| 196 Keyword('NEGATE', "negate", True), | |
| 197 Keyword('NEW', "new", False), | |
| 198 Keyword('NULL', "null", False), | |
| 199 Keyword('OPERATOR', "operator", True), | |
| 200 Keyword('RETURN', "return", False), | |
| 201 Keyword('SET', "set", True), | |
| 202 Keyword('SOURCE', "source", True), | |
| 203 Keyword('STATIC', "static", True), | |
| 204 Keyword('SUPER', "super", False), | |
| 205 Keyword('SWITCH', "switch", False), | |
| 206 Keyword('THIS', "this", False), | |
| 207 Keyword('THROW', "throw", False), | |
| 208 Keyword('TRUE', "true", False), | |
| 209 Keyword('TYPEDEF', "typedef", True), | |
| 210 Keyword('TRY', "try", False), | |
| 211 Keyword('VAR', "var", False), | |
| 212 Keyword('VOID', "void", False), | |
| 213 Keyword('WHILE', "while", False)] | |
| OLD | NEW |