OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 interface Scanner { | 5 interface Scanner { |
6 Token tokenize(); | 6 Token tokenize(); |
7 } | 7 } |
8 | 8 |
9 /** | 9 /** |
10 * Common base class for a Dart scanner. | 10 * Common base class for a Dart scanner. |
11 */ | 11 */ |
12 class AbstractScanner<T extends SourceString> implements Scanner { | 12 class AbstractScanner<T extends SourceString> implements Scanner { |
13 abstract int advance(); | 13 abstract int advance(); |
14 abstract int nextByte(); | 14 abstract int nextByte(); |
15 abstract int peek(); | 15 abstract int peek(); |
16 abstract int select(int choice, PrecedenceInfo yes, PrecedenceInfo no); | 16 abstract int select(int choice, PrecedenceInfo yes, PrecedenceInfo no); |
17 abstract void appendPrecedenceToken(PrecedenceInfo info); | 17 abstract void appendPrecedenceToken(PrecedenceInfo info); |
18 abstract void appendStringToken(PrecedenceInfo info, String value); | 18 abstract void appendStringToken(PrecedenceInfo info, String value); |
19 abstract void appendByteStringToken(PrecedenceInfo info, T value); | 19 abstract void appendByteStringToken(PrecedenceInfo info, T value); |
20 abstract void appendKeywordToken(Keyword keyword); | 20 abstract void appendKeywordToken(Keyword keyword); |
21 abstract void appendWhiteSpace(int next); | 21 abstract void appendWhiteSpace(int next); |
22 abstract void appendEofToken(); | 22 abstract void appendEofToken(); |
23 abstract T asciiString(int start, int offset); | 23 abstract T asciiString(int start, int offset); |
24 abstract T utf8String(int start, int offset); | 24 abstract T utf8String(int start, int offset); |
25 abstract Token firstToken(); | 25 abstract Token firstToken(); |
| 26 abstract Token previousToken(); |
26 abstract void beginToken(); | 27 abstract void beginToken(); |
27 abstract void addToCharOffset(int offset); | 28 abstract void addToCharOffset(int offset); |
28 abstract int get charOffset(); | 29 abstract int get charOffset(); |
29 abstract int get byteOffset(); | 30 abstract int get byteOffset(); |
30 abstract void appendBeginGroup(PrecedenceInfo info, String value); | 31 abstract void appendBeginGroup(PrecedenceInfo info, String value); |
31 abstract int appendEndGroup(PrecedenceInfo info, String value, int openKind); | 32 abstract int appendEndGroup(PrecedenceInfo info, String value, int openKind); |
32 abstract void appendGt(PrecedenceInfo info, String value); | 33 abstract void appendGt(PrecedenceInfo info, String value); |
33 abstract void appendGtGt(PrecedenceInfo info, String value); | 34 abstract void appendGtGt(PrecedenceInfo info, String value); |
34 abstract void appendGtGtGt(PrecedenceInfo info, String value); | 35 abstract void appendGtGtGt(PrecedenceInfo info, String value); |
35 abstract void discardOpenLt(); | 36 abstract void discardOpenLt(); |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 } else { | 237 } else { |
237 appendPrecedenceToken(TILDE_INFO); | 238 appendPrecedenceToken(TILDE_INFO); |
238 return next; | 239 return next; |
239 } | 240 } |
240 } | 241 } |
241 | 242 |
242 int tokenizeOpenSquareBracket(int next) { | 243 int tokenizeOpenSquareBracket(int next) { |
243 // [ [] []= | 244 // [ [] []= |
244 next = advance(); | 245 next = advance(); |
245 if (next === $CLOSE_SQUARE_BRACKET) { | 246 if (next === $CLOSE_SQUARE_BRACKET) { |
246 return select($EQ, INDEX_EQ_INFO, INDEX_INFO); | 247 Token token = previousToken(); |
247 } else { | 248 if (token is KeywordToken && token.value == Keyword.OPERATOR) { |
248 appendBeginGroup(OPEN_SQUARE_BRACKET_INFO, "["); | 249 return select($EQ, INDEX_EQ_INFO, INDEX_INFO); |
249 return next; | 250 } |
250 } | 251 } |
| 252 appendBeginGroup(OPEN_SQUARE_BRACKET_INFO, "["); |
| 253 return next; |
251 } | 254 } |
252 | 255 |
253 int tokenizeCaret(int next) { | 256 int tokenizeCaret(int next) { |
254 // ^ ^= | 257 // ^ ^= |
255 return select($EQ, CARET_EQ_INFO, CARET_INFO); | 258 return select($EQ, CARET_EQ_INFO, CARET_INFO); |
256 } | 259 } |
257 | 260 |
258 int tokenizeBar(int next) { | 261 int tokenizeBar(int next) { |
259 // | || |= | 262 // | || |= |
260 next = advance(); | 263 next = advance(); |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
758 charOffset); | 761 charOffset); |
759 } | 762 } |
760 } | 763 } |
761 | 764 |
762 class MalformedInputException { | 765 class MalformedInputException { |
763 final String message; | 766 final String message; |
764 final position; | 767 final position; |
765 MalformedInputException(this.message, this.position); | 768 MalformedInputException(this.message, this.position); |
766 toString() => message; | 769 toString() => message; |
767 } | 770 } |
OLD | NEW |