miller/pkg/parsing/token/token.go
John Kerl 761b46219c
Some fixes for staticcheck (#2006)
* Implement some staticcheck fixes

* make fmt

* more

* more staticcheck
2026-03-03 09:27:03 -05:00

433 lines
9.2 KiB
Go

// Code generated by gocc; DO NOT EDIT.
package token
import (
"bytes"
"fmt"
"strconv"
"unicode/utf8"
)
type Token struct {
Type
Lit []byte
Pos
}
type Type int
const (
INVALID Type = iota
EOF
)
type Pos struct {
Offset int
Line int
Column int
Context Context
}
func (p Pos) String() string {
// If the context provides a filename, provide a human-readable File:Line:Column representation.
switch src := p.Context.(type) {
case Sourcer:
return fmt.Sprintf("%s:%d:%d", src.Source(), p.Line, p.Column)
default:
return fmt.Sprintf("Pos(offset=%d, line=%d, column=%d)", p.Offset, p.Line, p.Column)
}
}
type TokenMap struct {
typeMap []string
idMap map[string]Type
}
func (m TokenMap) Id(tok Type) string {
if int(tok) < len(m.typeMap) {
return m.typeMap[tok]
}
return "unknown"
}
func (m TokenMap) Type(tok string) Type {
if typ, exist := m.idMap[tok]; exist {
return typ
}
return INVALID
}
func (m TokenMap) TokenString(tok *Token) string {
return fmt.Sprintf("%s(%d,%s)", m.Id(tok.Type), tok.Type, tok.Lit)
}
func (m TokenMap) StringType(typ Type) string {
return fmt.Sprintf("%s(%d)", m.Id(typ), typ)
}
// Equals returns returns true if the token Type and Lit are matches.
func (t *Token) Equals(rhs interface{}) bool {
switch rhsT := rhs.(type) {
case *Token:
return t == rhsT || (t.Type == rhsT.Type && bytes.Equal(t.Lit, rhsT.Lit))
default:
return false
}
}
// CharLiteralValue returns the string value of the char literal.
func (t *Token) CharLiteralValue() string {
return string(t.Lit[1 : len(t.Lit)-1])
}
// Float32Value returns the float32 value of the token or an error if the token literal does not
// denote a valid float32.
func (t *Token) Float32Value() (float32, error) {
if v, err := strconv.ParseFloat(string(t.Lit), 32); err != nil {
return 0, err
} else {
return float32(v), nil
}
}
// Float64Value returns the float64 value of the token or an error if the token literal does not
// denote a valid float64.
func (t *Token) Float64Value() (float64, error) {
return strconv.ParseFloat(string(t.Lit), 64)
}
// IDValue returns the string representation of an identifier token.
func (t *Token) IDValue() string {
return string(t.Lit)
}
// Int32Value returns the int32 value of the token or an error if the token literal does not
// denote a valid float64.
func (t *Token) Int32Value() (int32, error) {
if v, err := strconv.ParseInt(string(t.Lit), 10, 64); err != nil {
return 0, err
} else {
return int32(v), nil
}
}
// Int64Value returns the int64 value of the token or an error if the token literal does not
// denote a valid float64.
func (t *Token) Int64Value() (int64, error) {
return strconv.ParseInt(string(t.Lit), 10, 64)
}
// UTF8Rune decodes the UTF8 rune in the token literal. It returns utf8.RuneError if
// the token literal contains an invalid rune.
func (t *Token) UTF8Rune() (rune, error) {
r, _ := utf8.DecodeRune(t.Lit)
if r == utf8.RuneError {
err := fmt.Errorf("invalid rune")
return r, err
}
return r, nil
}
// StringValue returns the string value of the token literal.
func (t *Token) StringValue() string {
return string(t.Lit[1 : len(t.Lit)-1])
}
var TokMap = TokenMap{
typeMap: []string{
"INVALID",
"␚",
"empty",
";",
"{",
"}",
"=",
"unset",
"filter",
">",
">>",
"|",
"stdout",
"stderr",
"print",
",",
"printn",
"eprint",
"eprintn",
"dump",
"edump",
"tee",
"emitf",
"emit1",
"emit",
"(",
")",
"emitp",
"field_name",
"$[",
"]",
"braced_field_name",
"$[[",
"$[[[",
"full_srec",
"oosvar_name",
"@[",
"braced_oosvar_name",
"full_oosvar",
"all",
"non_sigil_name",
"arr",
"bool",
"float",
"int",
"map",
"num",
"str",
"var",
"funct",
"||=",
"^^=",
"&&=",
"??=",
"???=",
"|=",
"&=",
"^=",
"<<=",
">>=",
">>>=",
"+=",
".=",
"-=",
"*=",
"/=",
"//=",
"%=",
"**=",
"?",
":",
"||",
"^^",
"&&",
"=~",
"!=~",
"==",
"!=",
"<=>",
">=",
"<",
"<=",
"^",
"&",
"<<",
">>>",
"+",
"-",
".+",
".-",
"*",
"/",
"//",
"%",
".*",
"./",
".//",
".",
"!",
"~",
"??",
"???",
"**",
"string_literal",
"regex_case_insensitive",
"int_literal",
"float_literal",
"boolean_literal",
"null_literal",
"inf_literal",
"nan_literal",
"const_M_PI",
"const_M_E",
"panic",
"[",
"ctx_IPS",
"ctx_IFS",
"ctx_IRS",
"ctx_OPS",
"ctx_OFS",
"ctx_ORS",
"ctx_FLATSEP",
"ctx_NF",
"ctx_NR",
"ctx_FNR",
"ctx_FILENAME",
"ctx_FILENUM",
"env",
"[[",
"[[[",
"call",
"begin",
"end",
"if",
"elif",
"else",
"while",
"do",
"for",
"in",
"break",
"continue",
"func",
"subr",
"return",
},
idMap: map[string]Type{
"INVALID": 0,
"␚": 1,
"empty": 2,
";": 3,
"{": 4,
"}": 5,
"=": 6,
"unset": 7,
"filter": 8,
">": 9,
">>": 10,
"|": 11,
"stdout": 12,
"stderr": 13,
"print": 14,
",": 15,
"printn": 16,
"eprint": 17,
"eprintn": 18,
"dump": 19,
"edump": 20,
"tee": 21,
"emitf": 22,
"emit1": 23,
"emit": 24,
"(": 25,
")": 26,
"emitp": 27,
"field_name": 28,
"$[": 29,
"]": 30,
"braced_field_name": 31,
"$[[": 32,
"$[[[": 33,
"full_srec": 34,
"oosvar_name": 35,
"@[": 36,
"braced_oosvar_name": 37,
"full_oosvar": 38,
"all": 39,
"non_sigil_name": 40,
"arr": 41,
"bool": 42,
"float": 43,
"int": 44,
"map": 45,
"num": 46,
"str": 47,
"var": 48,
"funct": 49,
"||=": 50,
"^^=": 51,
"&&=": 52,
"??=": 53,
"???=": 54,
"|=": 55,
"&=": 56,
"^=": 57,
"<<=": 58,
">>=": 59,
">>>=": 60,
"+=": 61,
".=": 62,
"-=": 63,
"*=": 64,
"/=": 65,
"//=": 66,
"%=": 67,
"**=": 68,
"?": 69,
":": 70,
"||": 71,
"^^": 72,
"&&": 73,
"=~": 74,
"!=~": 75,
"==": 76,
"!=": 77,
"<=>": 78,
">=": 79,
"<": 80,
"<=": 81,
"^": 82,
"&": 83,
"<<": 84,
">>>": 85,
"+": 86,
"-": 87,
".+": 88,
".-": 89,
"*": 90,
"/": 91,
"//": 92,
"%": 93,
".*": 94,
"./": 95,
".//": 96,
".": 97,
"!": 98,
"~": 99,
"??": 100,
"???": 101,
"**": 102,
"string_literal": 103,
"regex_case_insensitive": 104,
"int_literal": 105,
"float_literal": 106,
"boolean_literal": 107,
"null_literal": 108,
"inf_literal": 109,
"nan_literal": 110,
"const_M_PI": 111,
"const_M_E": 112,
"panic": 113,
"[": 114,
"ctx_IPS": 115,
"ctx_IFS": 116,
"ctx_IRS": 117,
"ctx_OPS": 118,
"ctx_OFS": 119,
"ctx_ORS": 120,
"ctx_FLATSEP": 121,
"ctx_NF": 122,
"ctx_NR": 123,
"ctx_FNR": 124,
"ctx_FILENAME": 125,
"ctx_FILENUM": 126,
"env": 127,
"[[": 128,
"[[[": 129,
"call": 130,
"begin": 131,
"end": 132,
"if": 133,
"elif": 134,
"else": 135,
"while": 136,
"do": 137,
"for": 138,
"in": 139,
"break": 140,
"continue": 141,
"func": 142,
"subr": 143,
"return": 144,
},
}