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