// 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; }