token: add token representations

This commit is contained in:
Fatih Arslan 2015-10-03 15:34:06 +03:00
parent 7e929f0990
commit 6fb7de55d3

View File

@ -1,5 +1,7 @@
package parser package parser
import "strconv"
// Token is the set of lexical tokens of the HCL (HashiCorp Configuration Language) // Token is the set of lexical tokens of the HCL (HashiCorp Configuration Language)
type Token int type Token int
@ -36,6 +38,51 @@ const (
operator_end operator_end
) )
var tokens = [...]string{
ILLEGAL: "ILLEGAL",
EOF: "EOF",
COMMENT: "COMMENT",
NEWLINE: "NEWLINE",
IDENT: "IDENT",
NUMBER: "NUMBER",
FLOAT: "FLOAT",
BOOL: "BOOL",
STRING: "STRING",
LBRACK: "[",
LBRACE: "{",
COMMA: ",",
PERIOD: ".",
RBRACK: "]",
RBRACE: "}",
ASSIGN: "=",
ADD: "+",
SUB: "-",
EPLUS: "e",
EMINUS: "e-",
}
// String returns the string corresponding to the token tok.
// For operators, delimiters, and keywords the string is the actual
// token character sequence (e.g., for the token ADD, 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 (t Token) String() string {
s := ""
if 0 <= t && t < Token(len(tokens)) {
s = tokens[t]
}
if s == "" {
s = "token(" + strconv.Itoa(int(t)) + ")"
}
return s
}
// IsLiteral returns true for tokens corresponding to identifiers and basic // IsLiteral returns true for tokens corresponding to identifiers and basic
// type literals; it returns false otherwise. // type literals; it returns false otherwise.
func (t Token) IsLiteral() bool { return literal_beg < t && t < literal_end } func (t Token) IsLiteral() bool { return literal_beg < t && t < literal_end }