| Index: lib/src/backend/platform_selector/parser.dart
|
| diff --git a/lib/src/backend/platform_selector/parser.dart b/lib/src/backend/platform_selector/parser.dart
|
| deleted file mode 100644
|
| index 4a08025adc8f65ee0a4b6274779138e4cc2fe06a..0000000000000000000000000000000000000000
|
| --- a/lib/src/backend/platform_selector/parser.dart
|
| +++ /dev/null
|
| @@ -1,105 +0,0 @@
|
| -// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -import 'package:source_span/source_span.dart';
|
| -
|
| -import 'ast.dart';
|
| -import 'scanner.dart';
|
| -import 'token.dart';
|
| -
|
| -/// A class for parsing a platform selector.
|
| -///
|
| -/// Platform selectors use a stripped-down version of the Dart expression
|
| -/// syntax that only contains variables, parentheses, and boolean operators.
|
| -/// Variables may also contain dashes, contrary to Dart's syntax; this allows
|
| -/// consistency with command-line arguments.
|
| -class Parser {
|
| - /// The scanner that tokenizes the selector.
|
| - final Scanner _scanner;
|
| -
|
| - Parser(String selector)
|
| - : _scanner = new Scanner(selector);
|
| -
|
| - /// Parses the selector.
|
| - ///
|
| - /// This must only be called once per parser.
|
| - Node parse() {
|
| - var selector = _conditional();
|
| -
|
| - if (_scanner.peek().type != TokenType.endOfFile) {
|
| - throw new SourceSpanFormatException(
|
| - "Expected end of input.", _scanner.peek().span);
|
| - }
|
| -
|
| - return selector;
|
| - }
|
| -
|
| - /// Parses a conditional:
|
| - ///
|
| - /// conditionalExpression:
|
| - /// logicalOrExpression ("?" conditionalExpression ":"
|
| - /// conditionalExpression)?
|
| - Node _conditional() {
|
| - var condition = _or();
|
| - if (!_scanner.scan(TokenType.questionMark)) return condition;
|
| -
|
| - var whenTrue = _conditional();
|
| - if (!_scanner.scan(TokenType.colon)) {
|
| - throw new SourceSpanFormatException(
|
| - 'Expected ":".', _scanner.peek().span);
|
| - }
|
| -
|
| - var whenFalse = _conditional();
|
| - return new ConditionalNode(condition, whenTrue, whenFalse);
|
| - }
|
| -
|
| - /// Parses a logical or:
|
| - ///
|
| - /// logicalOrExpression:
|
| - /// logicalAndExpression ("||" logicalOrExpression)?
|
| - Node _or() {
|
| - var left = _and();
|
| - if (!_scanner.scan(TokenType.or)) return left;
|
| - return new OrNode(left, _or());
|
| - }
|
| -
|
| - /// Parses a logical and:
|
| - ///
|
| - /// logicalAndExpression:
|
| - /// simpleExpression ("&&" logicalAndExpression)?
|
| - Node _and() {
|
| - var left = _simpleExpression();
|
| - if (!_scanner.scan(TokenType.and)) return left;
|
| - return new AndNode(left, _and());
|
| - }
|
| -
|
| - /// Parses a simple expression:
|
| - ///
|
| - /// simpleExpression:
|
| - /// "!" simpleExpression |
|
| - /// "(" conditionalExpression ")" |
|
| - /// IDENTIFIER
|
| - Node _simpleExpression() {
|
| - var token = _scanner.next();
|
| - switch (token.type) {
|
| - case TokenType.not:
|
| - var child = _simpleExpression();
|
| - return new NotNode(child, token.span.expand(child.span));
|
| -
|
| - case TokenType.leftParen:
|
| - var child = _conditional();
|
| - if (!_scanner.scan(TokenType.rightParen)) {
|
| - throw new SourceSpanFormatException(
|
| - 'Expected ")".', _scanner.peek().span);
|
| - }
|
| - return child;
|
| -
|
| - case TokenType.identifier:
|
| - return new VariableNode(token.name, token.span);
|
| -
|
| - default:
|
| - throw new SourceSpanFormatException("Expected expression.", token.span);
|
| - }
|
| - }
|
| -}
|
|
|