|
- // Copyright 2009 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
-
- // Package token defines constants representing the lexical tokens of the gcfg
- // configuration syntax and basic operations on tokens (printing, predicates).
- //
- // Note that the API for the token package may change to accommodate new
- // features or implementation changes in gcfg.
- //
- package token
-
- import "strconv"
-
- // Token is the set of lexical tokens of the gcfg configuration syntax.
- type Token int
-
- // The list of tokens.
- const (
- // Special tokens
- ILLEGAL Token = iota
- EOF
- COMMENT
-
- literal_beg
- // Identifiers and basic type literals
- // (these tokens stand for classes of literals)
- IDENT // section-name, variable-name
- STRING // "subsection-name", variable value
- literal_end
-
- operator_beg
- // Operators and delimiters
- ASSIGN // =
- LBRACK // [
- RBRACK // ]
- EOL // \n
- operator_end
- )
-
- var tokens = [...]string{
- ILLEGAL: "ILLEGAL",
-
- EOF: "EOF",
- COMMENT: "COMMENT",
-
- IDENT: "IDENT",
- STRING: "STRING",
-
- ASSIGN: "=",
- LBRACK: "[",
- RBRACK: "]",
- EOL: "\n",
- }
-
- // String returns the string corresponding to the token tok.
- // For operators and delimiters, the string is the actual token character
- // sequence (e.g., for the token ASSIGN, the string is "="). For all other
- // tokens the string corresponds to the token constant name (e.g. for the
- // token IDENT, the string is "IDENT").
- //
- func (tok Token) String() string {
- s := ""
- if 0 <= tok && tok < Token(len(tokens)) {
- s = tokens[tok]
- }
- if s == "" {
- s = "token(" + strconv.Itoa(int(tok)) + ")"
- }
- return s
- }
-
- // Predicates
-
- // IsLiteral returns true for tokens corresponding to identifiers
- // and basic type literals; it returns false otherwise.
- //
- func (tok Token) IsLiteral() bool { return literal_beg < tok && tok < literal_end }
-
- // IsOperator returns true for tokens corresponding to operators and
- // delimiters; it returns false otherwise.
- //
- func (tok Token) IsOperator() bool { return operator_beg < tok && tok < operator_end }
|