| // Copyright (c) 2016, 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'; |
| |
| /// A token in a boolean 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 { |
| @override |
| final type = TokenType.identifier; |
| @override |
| final FileSpan span; |
| |
| /// The name of the identifier. |
| final String name; |
| |
| IdentifierToken(this.name, this.span); |
| |
| @override |
| String toString() => 'identifier "$name"'; |
| } |
| |
| /// An enumeration of types of tokens. |
| class TokenType { |
| /// A `(` character. |
| static const leftParen = TokenType._('left paren'); |
| |
| /// A `)` character. |
| static const rightParen = TokenType._('right paren'); |
| |
| /// A `||` sequence. |
| static const or = TokenType._('or'); |
| |
| /// A `&&` sequence. |
| static const and = TokenType._('and'); |
| |
| /// A `!` character. |
| static const not = TokenType._('not'); |
| |
| /// A `?` character. |
| static const questionMark = TokenType._('question mark'); |
| |
| /// A `:` character. |
| static const colon = TokenType._('colon'); |
| |
| /// A named identifier. |
| static const identifier = TokenType._('identifier'); |
| |
| /// The end of the selector. |
| static const endOfFile = TokenType._('end of file'); |
| |
| /// The name of the token type. |
| final String name; |
| |
| const TokenType._(this.name); |
| |
| @override |
| String toString() => name; |
| } |