Index: lib/src/backend/platform_selector/token.dart |
diff --git a/lib/src/backend/platform_selector/token.dart b/lib/src/backend/platform_selector/token.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fc6828a76cb48ef5e50e50bd1dfecc3a44bface8 |
--- /dev/null |
+++ b/lib/src/backend/platform_selector/token.dart |
@@ -0,0 +1,72 @@ |
+// 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. |
+ |
+library unittest.backend.platform_selector.token; |
+ |
+import 'package:source_span/source_span.dart'; |
+ |
+/// A token in a platform selector. |
+class Token { |
+ /// The type of the token. |
+ final TokenType type; |
+ |
+ /// The span indicating where this token came from. |
+ /// |
+ /// This is a [FileSpan] because the tokens are parsed from a single |
+ /// continuous string, but the string itself isn't actually a file. It might |
+ /// come from a statically-parsed annotation or from a parameter. |
+ final FileSpan span; |
+ |
+ Token(this.type, this.span); |
+} |
+ |
+/// A token representing an identifier. |
+class IdentifierToken implements Token { |
+ final type = TokenType.identifier; |
+ final FileSpan span; |
+ |
+ /// The name of the identifier. |
+ final String name; |
+ |
+ IdentifierToken(this.name, this.span); |
+ |
+ String toString() => 'identifier "$name"'; |
+} |
+ |
+/// An enumeration of types of tokens. |
+class TokenType { |
+ /// A `(` character. |
+ static const leftParen = const TokenType._("left paren"); |
+ |
+ /// A `)` character. |
+ static const rightParen = const TokenType._("right paren"); |
+ |
+ /// A `||` sequence. |
+ static const or = const TokenType._("or"); |
+ |
+ /// A `&&` sequence. |
+ static const and = const TokenType._("and"); |
+ |
+ /// A `!` character. |
+ static const not = const TokenType._("not"); |
+ |
+ /// A `?` character. |
+ static const questionMark = const TokenType._("question mark"); |
+ |
+ /// A `:` character. |
+ static const colon = const TokenType._("colon"); |
+ |
+ /// A named identifier. |
+ static const identifier = const TokenType._("identifier"); |
+ |
+ /// The end of the selector. |
+ static const endOfFile = const TokenType._("end of file"); |
+ |
+ /// The name of the token type. |
+ final String name; |
+ |
+ const TokenType._(this.name); |
+ |
+ String toString() => name; |
+} |