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

Side by Side Diff: pkg/polymer_expressions/lib/parser.dart

Issue 139903008: List literals in polymer_expressions (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 polymer_expressions.parser; 5 library polymer_expressions.parser;
6 6
7 import 'tokenizer.dart'; 7 import 'tokenizer.dart';
8 import 'expression.dart'; 8 import 'expression.dart';
9 9
10 const _UNARY_OPERATORS = const ['+', '-', '!']; 10 const _UNARY_OPERATORS = const ['+', '-', '!'];
(...skipping 12 matching lines...) Expand all
23 _astFactory = (astFactory == null) ? new AstFactory() : astFactory; 23 _astFactory = (astFactory == null) ? new AstFactory() : astFactory;
24 24
25 Expression parse() { 25 Expression parse() {
26 _tokens = _tokenizer.tokenize(); 26 _tokens = _tokenizer.tokenize();
27 _iterator = _tokens.iterator; 27 _iterator = _tokens.iterator;
28 _advance(); 28 _advance();
29 return _parseExpression(); 29 return _parseExpression();
30 } 30 }
31 31
32 _advance([int kind, String value]) { 32 _advance([int kind, String value]) {
33 if ((kind != null && _token.kind != kind) 33 if ((kind != null && (_token == null || _token.kind != kind))
34 || (value != null && _token.value != value)) { 34 || (value != null && (_token == null || _token.value != value))) {
35 throw new ParseException("Expected $value: $_token"); 35 throw new ParseException("Expected kind $kind ($value): $_token");
36 } 36 }
37 _iterator.moveNext(); 37 _iterator.moveNext();
38 } 38 }
39 39
40 Expression _parseExpression() { 40 Expression _parseExpression() {
41 if (_token == null) return _astFactory.empty(); 41 if (_token == null) return _astFactory.empty();
42 var expr = _parseUnary(); 42 var expr = _parseUnary();
43 return (expr == null) ? null : _parsePrecedence(expr, 0); 43 return (expr == null) ? null : _parsePrecedence(expr, 0);
44 } 44 }
45 45
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 return _parseString(); 153 return _parseString();
154 case INTEGER_TOKEN: 154 case INTEGER_TOKEN:
155 return _parseInteger(); 155 return _parseInteger();
156 case DECIMAL_TOKEN: 156 case DECIMAL_TOKEN:
157 return _parseDecimal(); 157 return _parseDecimal();
158 case GROUPER_TOKEN: 158 case GROUPER_TOKEN:
159 if (_token.value == '(') { 159 if (_token.value == '(') {
160 return _parseParenthesized(); 160 return _parseParenthesized();
161 } else if (_token.value == '{') { 161 } else if (_token.value == '{') {
162 return _parseMapLiteral(); 162 return _parseMapLiteral();
163 } else if (_token.value == '[') {
164 return _parseListLiteral();
163 } 165 }
164 return null; 166 return null;
165 case COLON_TOKEN: 167 case COLON_TOKEN:
166 // TODO(justinfagnani): We need better errors throughout the parser, and 168 // TODO(justinfagnani): We need better errors throughout the parser, and
167 // we should be throwing ParseErrors to be caught by the caller 169 // we should be throwing ParseErrors to be caught by the caller
168 throw new ArgumentError('unexpected token ":"'); 170 throw new ArgumentError('unexpected token ":"');
169 default: 171 default:
170 return null; 172 return null;
171 } 173 }
172 } 174 }
173 175
176 ListLiteral _parseListLiteral() {
177 var items = [];
178 do {
179 _advance();
180 if (_token.kind == GROUPER_TOKEN && _token.value == ']') {
181 break;
182 }
183 items.add(_parseExpression());
184 } while(_token != null && _token.value == ',');
185 _advance(GROUPER_TOKEN, ']');
186 return new ListLiteral(items);
187 }
188
174 MapLiteral _parseMapLiteral() { 189 MapLiteral _parseMapLiteral() {
175 var entries = []; 190 var entries = [];
176 do { 191 do {
177 _advance(); 192 _advance();
178 if (_token.kind == GROUPER_TOKEN && _token.value == '}') { 193 if (_token.kind == GROUPER_TOKEN && _token.value == '}') {
179 break; 194 break;
180 } 195 }
181 entries.add(_parseMapLiteralEntry()); 196 entries.add(_parseMapLiteralEntry());
182 } while(_token != null && _token.value == ','); 197 } while(_token != null && _token.value == ',');
183 _advance(GROUPER_TOKEN, '}'); 198 _advance(GROUPER_TOKEN, '}');
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 return value; 294 return value;
280 } 295 }
281 296
282 Literal<double> _parseDecimal([String prefix = '']) { 297 Literal<double> _parseDecimal([String prefix = '']) {
283 var value = _astFactory.literal(double.parse('$prefix${_token.value}')); 298 var value = _astFactory.literal(double.parse('$prefix${_token.value}'));
284 _advance(); 299 _advance();
285 return value; 300 return value;
286 } 301 }
287 302
288 } 303 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698