mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-17 16:38:54 +00:00
433 lines
9.2 KiB
Go
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,
|
|
},
|
|
}
|