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

Side by Side Diff: packages/yaml/lib/src/parser.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 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
« no previous file with comments | « packages/yaml/lib/src/null_span.dart ('k') | packages/yaml/lib/src/scanner.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 yaml.parser; 5 library yaml.parser;
6 6
7 import 'package:source_span/source_span.dart'; 7 import 'package:source_span/source_span.dart';
8 import 'package:string_scanner/string_scanner.dart'; 8 import 'package:string_scanner/string_scanner.dart';
9 9
10 import 'event.dart'; 10 import 'event.dart';
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 return _parseFlowMappingValue(empty: true); 108 return _parseFlowMappingValue(empty: true);
109 default: 109 default:
110 throw "Unreachable"; 110 throw "Unreachable";
111 } 111 }
112 } 112 }
113 113
114 /// Parses the production: 114 /// Parses the production:
115 /// 115 ///
116 /// stream ::= 116 /// stream ::=
117 /// STREAM-START implicit_document? explicit_document* STREAM-END 117 /// STREAM-START implicit_document? explicit_document* STREAM-END
118 /// ************ 118 /// ************
119 Event _parseStreamStart() { 119 Event _parseStreamStart() {
120 var token = _scanner.scan(); 120 var token = _scanner.scan();
121 assert(token.type == TokenType.STREAM_START); 121 assert(token.type == TokenType.STREAM_START);
122 122
123 _state = _State.DOCUMENT_START; 123 _state = _State.DOCUMENT_START;
124 return new Event(EventType.STREAM_START, token.span); 124 return new Event(EventType.STREAM_START, token.span);
125 } 125 }
126 126
127 /// Parses the productions: 127 /// Parses the productions:
128 /// 128 ///
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 return new DocumentStartEvent(start.expand(token.span), 176 return new DocumentStartEvent(start.expand(token.span),
177 versionDirective: versionDirective, 177 versionDirective: versionDirective,
178 tagDirectives: tagDirectives, 178 tagDirectives: tagDirectives,
179 isImplicit: false); 179 isImplicit: false);
180 } 180 }
181 181
182 /// Parses the productions: 182 /// Parses the productions:
183 /// 183 ///
184 /// explicit_document ::= 184 /// explicit_document ::=
185 /// DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* 185 /// DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
186 /// *********** 186 /// ***********
187 Event _parseDocumentContent() { 187 Event _parseDocumentContent() {
188 var token = _scanner.peek(); 188 var token = _scanner.peek();
189 189
190 switch (token.type) { 190 switch (token.type) {
191 case TokenType.VERSION_DIRECTIVE: 191 case TokenType.VERSION_DIRECTIVE:
192 case TokenType.TAG_DIRECTIVE: 192 case TokenType.TAG_DIRECTIVE:
193 case TokenType.DOCUMENT_START: 193 case TokenType.DOCUMENT_START:
194 case TokenType.DOCUMENT_END: 194 case TokenType.DOCUMENT_END:
195 case TokenType.STREAM_END: 195 case TokenType.STREAM_END:
196 _state = _states.removeLast(); 196 _state = _states.removeLast();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 253
254 if (token is AliasToken) { 254 if (token is AliasToken) {
255 _scanner.scan(); 255 _scanner.scan();
256 _state = _states.removeLast(); 256 _state = _states.removeLast();
257 return new AliasEvent(token.span, token.name); 257 return new AliasEvent(token.span, token.name);
258 } 258 }
259 259
260 var anchor; 260 var anchor;
261 var tagToken; 261 var tagToken;
262 var span = token.span.start.pointSpan(); 262 var span = token.span.start.pointSpan();
263 parseAnchor() { 263 parseAnchor(token) {
264 anchor = token.name; 264 anchor = token.name;
265 span = span.expand(token.span); 265 span = span.expand(token.span);
266 token = _scanner.advance(); 266 return _scanner.advance();
267 } 267 }
268 268
269 parseTag() { 269 parseTag(token) {
270 tagToken = token; 270 tagToken = token;
271 span = span.expand(token.span); 271 span = span.expand(token.span);
272 token = _scanner.advance(); 272 return _scanner.advance();
273 } 273 }
274 274
275 if (token is AnchorToken) { 275 if (token is AnchorToken) {
276 parseAnchor(); 276 token = parseAnchor(token);
277 if (token is TagToken) parseTag(); 277 if (token is TagToken) token = parseTag(token);
278 } else if (token is TagToken) { 278 } else if (token is TagToken) {
279 parseTag(); 279 token = parseTag(token);
280 if (token is AnchorToken) parseAnchor(); 280 if (token is AnchorToken) token = parseAnchor(token);
281 } 281 }
282 282
283 var tag; 283 var tag;
284 if (tagToken != null) { 284 if (tagToken != null) {
285 if (tagToken.handle == null) { 285 if (tagToken.handle == null) {
286 tag = tagToken.suffix; 286 tag = tagToken.suffix;
287 } else { 287 } else {
288 var tagDirective = _tagDirectives[tagToken.handle]; 288 var tagDirective = _tagDirectives[tagToken.handle];
289 if (tagDirective == null) { 289 if (tagDirective == null) {
290 throw new YamlException("Undefined tag handle.", tagToken.span); 290 throw new YamlException("Undefined tag handle.", tagToken.span);
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 } 455 }
456 456
457 /// Parses the productions: 457 /// Parses the productions:
458 /// 458 ///
459 /// block_mapping ::= BLOCK-MAPPING_START 459 /// block_mapping ::= BLOCK-MAPPING_START
460 /// 460 ///
461 /// ((KEY block_node_or_indentless_sequence?)? 461 /// ((KEY block_node_or_indentless_sequence?)?
462 /// 462 ///
463 /// (VALUE block_node_or_indentless_sequence?)?)* 463 /// (VALUE block_node_or_indentless_sequence?)?)*
464 /// ***** * 464 /// ***** *
465 /// BLOCK-END 465 /// BLOCK-END
466 /// 466 ///
467 Event _parseBlockMappingValue() { 467 Event _parseBlockMappingValue() {
468 var token = _scanner.peek(); 468 var token = _scanner.peek();
469 469
470 if (token.type != TokenType.VALUE) { 470 if (token.type != TokenType.VALUE) {
471 _state = _State.BLOCK_MAPPING_KEY; 471 _state = _State.BLOCK_MAPPING_KEY;
472 return _processEmptyScalar(token.span.start); 472 return _processEmptyScalar(token.span.start);
473 } 473 }
474 474
475 var start = token.span.start; 475 var start = token.span.start;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 token.span, CollectionStyle.FLOW); 520 token.span, CollectionStyle.FLOW);
521 } else if (token.type != TokenType.FLOW_SEQUENCE_END) { 521 } else if (token.type != TokenType.FLOW_SEQUENCE_END) {
522 _states.add(_State.FLOW_SEQUENCE_ENTRY); 522 _states.add(_State.FLOW_SEQUENCE_ENTRY);
523 return _parseNode(); 523 return _parseNode();
524 } 524 }
525 } 525 }
526 526
527 _scanner.scan(); 527 _scanner.scan();
528 _state = _states.removeLast(); 528 _state = _states.removeLast();
529 return new Event(EventType.SEQUENCE_END, token.span); 529 return new Event(EventType.SEQUENCE_END, token.span);
530 } 530 }
531 531
532 /// Parses the productions: 532 /// Parses the productions:
533 /// 533 ///
534 /// flow_sequence_entry ::= 534 /// flow_sequence_entry ::=
535 /// flow_node | KEY flow_node? (VALUE flow_node?)? 535 /// flow_node | KEY flow_node? (VALUE flow_node?)?
536 /// *** * 536 /// *** *
537 Event _parseFlowSequenceEntryMappingKey() { 537 Event _parseFlowSequenceEntryMappingKey() {
538 var token = _scanner.peek(); 538 var token = _scanner.peek();
539 539
540 if (token.type == TokenType.VALUE || 540 if (token.type == TokenType.VALUE ||
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 663
664 /// Generate an empty scalar event. 664 /// Generate an empty scalar event.
665 Event _processEmptyScalar(SourceLocation location) => 665 Event _processEmptyScalar(SourceLocation location) =>
666 new ScalarEvent(location.pointSpan(), '', ScalarStyle.PLAIN); 666 new ScalarEvent(location.pointSpan(), '', ScalarStyle.PLAIN);
667 667
668 /// Parses directives. 668 /// Parses directives.
669 Pair<VersionDirective, List<TagDirective>> _processDirectives() { 669 Pair<VersionDirective, List<TagDirective>> _processDirectives() {
670 var token = _scanner.peek(); 670 var token = _scanner.peek();
671 671
672 var versionDirective; 672 var versionDirective;
673 var tagDirectives = []; 673 var tagDirectives = <TagDirective>[];
674 while (token.type == TokenType.VERSION_DIRECTIVE || 674 while (token.type == TokenType.VERSION_DIRECTIVE ||
675 token.type == TokenType.TAG_DIRECTIVE) { 675 token.type == TokenType.TAG_DIRECTIVE) {
676 if (token is VersionDirectiveToken) { 676 if (token is VersionDirectiveToken) {
677 if (versionDirective != null) { 677 if (versionDirective != null) {
678 throw new YamlException("Duplicate %YAML directive.", token.span); 678 throw new YamlException("Duplicate %YAML directive.", token.span);
679 } 679 }
680 680
681 if (token.major != 1 || token.minor == 0) { 681 if (token.major != 1 || token.minor == 0) {
682 throw new YamlException( 682 throw new YamlException(
683 "Incompatible YAML document. This parser only supports YAML 1.1 " 683 "Incompatible YAML document. This parser only supports YAML 1.1 "
684 "and 1.2.", 684 "and 1.2.",
685 token.span); 685 token.span);
686 } else if (token.minor > 2) { 686 } else if (token.minor > 2) {
687 // TODO(nweiz): Print to stderr when issue 6943 is fixed and dart:io 687 // TODO(nweiz): Print to stderr when issue 6943 is fixed and dart:io
688 // is available. 688 // is available.
689 warn("Warning: this parser only supports YAML 1.1 and 1.2.", 689 warn("Warning: this parser only supports YAML 1.1 and 1.2.",
690 token.span); 690 token.span);
691 } 691 }
692 692
693 versionDirective = new VersionDirective(token.major, token.minor); 693 versionDirective = new VersionDirective(token.major, token.minor);
694 } else if (token is TagDirectiveToken) { 694 } else if (token is TagDirectiveToken) {
695 var tagDirective = new TagDirective(token.handle, token.prefix); 695 var tagDirective = new TagDirective(token.handle, token.prefix);
696 _appendTagDirective(tagDirective, token.span); 696 _appendTagDirective(tagDirective, token.span);
697 tagDirectives.add(tagDirective); 697 tagDirectives.add(tagDirective);
698 } 698 }
699 699
700 token = _scanner.advance(); 700 token = _scanner.advance();
701 } 701 }
702 702
703 _appendTagDirective( 703 _appendTagDirective(
704 new TagDirective("!", "!"), 704 new TagDirective("!", "!"),
705 token.span.start.pointSpan(), 705 token.span.start.pointSpan(),
706 allowDuplicates: true); 706 allowDuplicates: true);
707 _appendTagDirective( 707 _appendTagDirective(
708 new TagDirective("!!", "tag:yaml.org,2002:"), 708 new TagDirective("!!", "tag:yaml.org,2002:"),
709 token.span.start.pointSpan(), 709 token.span.start.pointSpan(),
710 allowDuplicates: true); 710 allowDuplicates: true);
711 711
712 return new Pair(versionDirective, tagDirectives); 712 return new Pair(versionDirective, tagDirectives);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 807
808 /// Expect nothing. 808 /// Expect nothing.
809 static const END = const _State("END"); 809 static const END = const _State("END");
810 810
811 final String name; 811 final String name;
812 812
813 const _State(this.name); 813 const _State(this.name);
814 814
815 String toString() => name; 815 String toString() => name;
816 } 816 }
OLDNEW
« no previous file with comments | « packages/yaml/lib/src/null_span.dart ('k') | packages/yaml/lib/src/scanner.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698