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

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

Issue 2486873003: Move scanner into pkg/front_end/lib/src/scanner. (Closed)
Patch Set: Created 4 years, 1 month 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
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 analyzer.src.dart.scanner.scanner; 5 library front_end.src.scanner.scanner;
6 6
7 import 'package:analyzer/dart/ast/token.dart';
8 import 'package:analyzer/error/error.dart';
9 import 'package:analyzer/error/listener.dart';
10 import 'package:analyzer/src/dart/ast/token.dart';
11 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
12 import 'package:analyzer/src/dart/scanner/reader.dart';
13 import 'package:analyzer/src/generated/java_engine.dart';
14 import 'package:analyzer/src/generated/source.dart';
15 import 'package:charcode/ascii.dart'; 7 import 'package:charcode/ascii.dart';
16 8 import 'package:front_end/src/scanner/errors.dart';
17 export 'package:analyzer/src/dart/error/syntactic_errors.dart'; 9 import 'package:front_end/src/scanner/reader.dart';
10 import 'package:front_end/src/scanner/string_utilities.dart';
11 import 'package:front_end/src/scanner/token.dart';
18 12
19 /** 13 /**
20 * A state in a state machine used to scan keywords. 14 * A state in a state machine used to scan keywords.
21 */ 15 */
22 class KeywordState { 16 class KeywordState {
23 /** 17 /**
24 * An empty transition table used by leaf states. 18 * An empty transition table used by leaf states.
25 */ 19 */
26 static List<KeywordState> _EMPTY_TABLE = new List<KeywordState>(26); 20 static List<KeywordState> _EMPTY_TABLE = new List<KeywordState>(26);
27 21
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 /** 119 /**
126 * The class `Scanner` implements a scanner for Dart code. 120 * The class `Scanner` implements a scanner for Dart code.
127 * 121 *
128 * The lexical structure of Dart is ambiguous without knowledge of the context 122 * The lexical structure of Dart is ambiguous without knowledge of the context
129 * in which a token is being scanned. For example, without context we cannot 123 * in which a token is being scanned. For example, without context we cannot
130 * determine whether source of the form "<<" should be scanned as a single 124 * determine whether source of the form "<<" should be scanned as a single
131 * left-shift operator or as two left angle brackets. This scanner does not have 125 * left-shift operator or as two left angle brackets. This scanner does not have
132 * any context, so it always resolves such conflicts by scanning the longest 126 * any context, so it always resolves such conflicts by scanning the longest
133 * possible token. 127 * possible token.
134 */ 128 */
135 class Scanner { 129 abstract class Scanner {
136 /**
137 * The source being scanned.
138 */
139 final Source source;
140
141 /** 130 /**
142 * The reader used to access the characters in the source. 131 * The reader used to access the characters in the source.
143 */ 132 */
144 final CharacterReader _reader; 133 final CharacterReader _reader;
145 134
146 /** 135 /**
147 * The error listener that will be informed of any errors that are found
148 * during the scan.
149 */
150 final AnalysisErrorListener _errorListener;
151
152 /**
153 * The flag specifying whether documentation comments should be parsed. 136 * The flag specifying whether documentation comments should be parsed.
154 */ 137 */
155 bool _preserveComments = true; 138 bool _preserveComments = true;
156 139
157 /** 140 /**
158 * The token pointing to the head of the linked list of tokens. 141 * The token pointing to the head of the linked list of tokens.
159 */ 142 */
160 Token _tokens; 143 Token _tokens;
161 144
162 /** 145 /**
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 bool scanGenericMethodComments = false; 195 bool scanGenericMethodComments = false;
213 196
214 /** 197 /**
215 * A flag indicating whether the lazy compound assignment operators '&&=' and 198 * A flag indicating whether the lazy compound assignment operators '&&=' and
216 * '||=' are enabled. 199 * '||=' are enabled.
217 */ 200 */
218 bool scanLazyAssignmentOperators = false; 201 bool scanLazyAssignmentOperators = false;
219 202
220 /** 203 /**
221 * Initialize a newly created scanner to scan characters from the given 204 * Initialize a newly created scanner to scan characters from the given
222 * [source]. The given character [_reader] will be used to read the characters 205 * character [_reader].
223 * in the source. The given [_errorListener] will be informed of any errors
224 * that are found.
225 */ 206 */
226 Scanner(this.source, this._reader, this._errorListener) { 207 Scanner(this._reader) {
227 _tokens = new Token(TokenType.EOF, -1); 208 _tokens = new Token(TokenType.EOF, -1);
228 _tokens.setNext(_tokens); 209 _tokens.setNext(_tokens);
229 _tail = _tokens; 210 _tail = _tokens;
230 _tokenStart = -1; 211 _tokenStart = -1;
231 _lineStarts.add(0); 212 _lineStarts.add(0);
232 } 213 }
233 214
234 /** 215 /**
235 * Return the first token in the token stream that was scanned. 216 * Return the first token in the token stream that was scanned.
236 */ 217 */
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 } 433 }
453 434
454 /** 435 /**
455 * Record the fact that we are at the beginning of a new line in the source. 436 * Record the fact that we are at the beginning of a new line in the source.
456 */ 437 */
457 void recordStartOfLine() { 438 void recordStartOfLine() {
458 _lineStarts.add(_reader.offset); 439 _lineStarts.add(_reader.offset);
459 } 440 }
460 441
461 /** 442 /**
443 * Report an error at the given offset. The [errorCode] is the error code
444 * indicating the nature of the error. The [arguments] are any arguments
445 * needed to complete the error message
446 */
447 void reportError(
448 ScannerErrorCode errorCode, int offset, List<Object> arguments);
449
450 /**
462 * Record that the source begins on the given [line] and [column] at the 451 * Record that the source begins on the given [line] and [column] at the
463 * current offset as given by the reader. Both the line and the column are 452 * current offset as given by the reader. Both the line and the column are
464 * one-based indexes. The line starts for lines before the given line will not 453 * one-based indexes. The line starts for lines before the given line will not
465 * be correct. 454 * be correct.
466 * 455 *
467 * This method must be invoked at most one time and must be invoked before 456 * This method must be invoked at most one time and must be invoked before
468 * scanning begins. The values provided must be sensible. The results are 457 * scanning begins. The values provided must be sensible. The results are
469 * undefined if these conditions are violated. 458 * undefined if these conditions are violated.
470 */ 459 */
471 void setSourceStart(int line, int column) { 460 void setSourceStart(int line, int column) {
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 } 659 }
671 return null; 660 return null;
672 } 661 }
673 662
674 /** 663 /**
675 * Report an error at the current offset. The [errorCode] is the error code 664 * Report an error at the current offset. The [errorCode] is the error code
676 * indicating the nature of the error. The [arguments] are any arguments 665 * indicating the nature of the error. The [arguments] are any arguments
677 * needed to complete the error message 666 * needed to complete the error message
678 */ 667 */
679 void _reportError(ScannerErrorCode errorCode, [List<Object> arguments]) { 668 void _reportError(ScannerErrorCode errorCode, [List<Object> arguments]) {
680 _errorListener.onError( 669 reportError(errorCode, _reader.offset, arguments);
681 new AnalysisError(source, _reader.offset, 1, errorCode, arguments));
682 } 670 }
683 671
684 int _select(int choice, TokenType yesType, TokenType noType) { 672 int _select(int choice, TokenType yesType, TokenType noType) {
685 int next = _reader.advance(); 673 int next = _reader.advance();
686 if (next == choice) { 674 if (next == choice) {
687 _appendTokenOfType(yesType); 675 _appendTokenOfType(yesType);
688 return _reader.advance(); 676 return _reader.advance();
689 } else { 677 } else {
690 _appendTokenOfType(noType); 678 _appendTokenOfType(noType);
691 return next; 679 return next;
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
1346 } 1334 }
1347 1335
1348 /** 1336 /**
1349 * Checks if [value] is a single-line or multi-line comment. 1337 * Checks if [value] is a single-line or multi-line comment.
1350 */ 1338 */
1351 static bool _isDocumentationComment(String value) { 1339 static bool _isDocumentationComment(String value) {
1352 return StringUtilities.startsWith3(value, 0, $slash, $slash, $slash) || 1340 return StringUtilities.startsWith3(value, 0, $slash, $slash, $slash) ||
1353 StringUtilities.startsWith3(value, 0, $slash, $asterisk, $asterisk); 1341 StringUtilities.startsWith3(value, 0, $slash, $asterisk, $asterisk);
1354 } 1342 }
1355 } 1343 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698