github.com/benhoyt/goawk@v1.8.1/lexer/token.go (about)

     1  // Lexer tokens
     2  
     3  package lexer
     4  
     5  // Token is the type of a single token.
     6  type Token int
     7  
     8  const (
     9  	ILLEGAL Token = iota
    10  	EOF
    11  	NEWLINE
    12  	CONCAT // Not really a token, but used as an operator
    13  
    14  	// Symbols
    15  	ADD
    16  	ADD_ASSIGN
    17  	AND
    18  	APPEND
    19  	ASSIGN
    20  	COLON
    21  	COMMA
    22  	DECR
    23  	DIV
    24  	DIV_ASSIGN
    25  	DOLLAR
    26  	EQUALS
    27  	GTE
    28  	GREATER
    29  	INCR
    30  	LBRACE
    31  	LBRACKET
    32  	LESS
    33  	LPAREN
    34  	LTE
    35  	MATCH
    36  	MOD
    37  	MOD_ASSIGN
    38  	MUL
    39  	MUL_ASSIGN
    40  	NOT_MATCH
    41  	NOT
    42  	NOT_EQUALS
    43  	OR
    44  	PIPE
    45  	POW
    46  	POW_ASSIGN
    47  	QUESTION
    48  	RBRACE
    49  	RBRACKET
    50  	RPAREN
    51  	SEMICOLON
    52  	SUB
    53  	SUB_ASSIGN
    54  
    55  	// Keywords
    56  	BEGIN
    57  	BREAK
    58  	CONTINUE
    59  	DELETE
    60  	DO
    61  	ELSE
    62  	END
    63  	EXIT
    64  	FOR
    65  	FUNCTION
    66  	GETLINE
    67  	IF
    68  	IN
    69  	NEXT
    70  	PRINT
    71  	PRINTF
    72  	RETURN
    73  	WHILE
    74  
    75  	// Built-in functions
    76  	F_ATAN2
    77  	F_CLOSE
    78  	F_COS
    79  	F_EXP
    80  	F_FFLUSH
    81  	F_GSUB
    82  	F_INDEX
    83  	F_INT
    84  	F_LENGTH
    85  	F_LOG
    86  	F_MATCH
    87  	F_RAND
    88  	F_SIN
    89  	F_SPLIT
    90  	F_SPRINTF
    91  	F_SQRT
    92  	F_SRAND
    93  	F_SUB
    94  	F_SUBSTR
    95  	F_SYSTEM
    96  	F_TOLOWER
    97  	F_TOUPPER
    98  
    99  	// Literals and names (variables and arrays)
   100  	NAME
   101  	NUMBER
   102  	STRING
   103  	REGEX
   104  
   105  	LAST       = REGEX
   106  	FIRST_FUNC = F_ATAN2
   107  	LAST_FUNC  = F_TOUPPER
   108  )
   109  
   110  var keywordTokens = map[string]Token{
   111  	"BEGIN":    BEGIN,
   112  	"break":    BREAK,
   113  	"continue": CONTINUE,
   114  	"delete":   DELETE,
   115  	"do":       DO,
   116  	"else":     ELSE,
   117  	"END":      END,
   118  	"exit":     EXIT,
   119  	"for":      FOR,
   120  	"function": FUNCTION,
   121  	"getline":  GETLINE,
   122  	"if":       IF,
   123  	"in":       IN,
   124  	"next":     NEXT,
   125  	"print":    PRINT,
   126  	"printf":   PRINTF,
   127  	"return":   RETURN,
   128  	"while":    WHILE,
   129  
   130  	"atan2":   F_ATAN2,
   131  	"close":   F_CLOSE,
   132  	"cos":     F_COS,
   133  	"exp":     F_EXP,
   134  	"fflush":  F_FFLUSH,
   135  	"gsub":    F_GSUB,
   136  	"index":   F_INDEX,
   137  	"int":     F_INT,
   138  	"length":  F_LENGTH,
   139  	"log":     F_LOG,
   140  	"match":   F_MATCH,
   141  	"rand":    F_RAND,
   142  	"sin":     F_SIN,
   143  	"split":   F_SPLIT,
   144  	"sprintf": F_SPRINTF,
   145  	"sqrt":    F_SQRT,
   146  	"srand":   F_SRAND,
   147  	"sub":     F_SUB,
   148  	"substr":  F_SUBSTR,
   149  	"system":  F_SYSTEM,
   150  	"tolower": F_TOLOWER,
   151  	"toupper": F_TOUPPER,
   152  }
   153  
   154  // KeywordToken returns the token associated with the given keyword
   155  // string, or ILLEGAL if given name is not a keyword.
   156  func KeywordToken(name string) Token {
   157  	return keywordTokens[name]
   158  }
   159  
   160  var tokenNames = map[Token]string{
   161  	ILLEGAL: "<illegal>",
   162  	EOF:     "EOF",
   163  	NEWLINE: "<newline>",
   164  	CONCAT:  "<concat>",
   165  
   166  	ADD:        "+",
   167  	ADD_ASSIGN: "+=",
   168  	AND:        "&&",
   169  	APPEND:     ">>",
   170  	ASSIGN:     "=",
   171  	COLON:      ":",
   172  	COMMA:      ",",
   173  	DECR:       "--",
   174  	DIV:        "/",
   175  	DIV_ASSIGN: "/=",
   176  	DOLLAR:     "$",
   177  	EQUALS:     "==",
   178  	GTE:        ">=",
   179  	GREATER:    ">",
   180  	INCR:       "++",
   181  	LBRACE:     "{",
   182  	LBRACKET:   "[",
   183  	LESS:       "<",
   184  	LPAREN:     "(",
   185  	LTE:        "<=",
   186  	MATCH:      "~",
   187  	MOD:        "%",
   188  	MOD_ASSIGN: "%=",
   189  	MUL:        "*",
   190  	MUL_ASSIGN: "*=",
   191  	NOT_MATCH:  "!~",
   192  	NOT:        "!",
   193  	NOT_EQUALS: "!=",
   194  	OR:         "||",
   195  	PIPE:       "|",
   196  	POW:        "^",
   197  	POW_ASSIGN: "^=",
   198  	QUESTION:   "?",
   199  	RBRACE:     "}",
   200  	RBRACKET:   "]",
   201  	RPAREN:     ")",
   202  	SEMICOLON:  ";",
   203  	SUB:        "-",
   204  	SUB_ASSIGN: "-=",
   205  
   206  	BEGIN:    "BEGIN",
   207  	BREAK:    "break",
   208  	CONTINUE: "continue",
   209  	DELETE:   "delete",
   210  	DO:       "do",
   211  	ELSE:     "else",
   212  	END:      "END",
   213  	EXIT:     "exit",
   214  	FOR:      "for",
   215  	FUNCTION: "function",
   216  	GETLINE:  "getline",
   217  	IF:       "if",
   218  	IN:       "in",
   219  	NEXT:     "next",
   220  	PRINT:    "print",
   221  	PRINTF:   "printf",
   222  	RETURN:   "return",
   223  	WHILE:    "while",
   224  
   225  	F_ATAN2:   "atan2",
   226  	F_CLOSE:   "close",
   227  	F_COS:     "cos",
   228  	F_EXP:     "exp",
   229  	F_FFLUSH:  "fflush",
   230  	F_GSUB:    "gsub",
   231  	F_INDEX:   "index",
   232  	F_INT:     "int",
   233  	F_LENGTH:  "length",
   234  	F_LOG:     "log",
   235  	F_MATCH:   "match",
   236  	F_RAND:    "rand",
   237  	F_SIN:     "sin",
   238  	F_SPLIT:   "split",
   239  	F_SPRINTF: "sprintf",
   240  	F_SQRT:    "sqrt",
   241  	F_SRAND:   "srand",
   242  	F_SUB:     "sub",
   243  	F_SUBSTR:  "substr",
   244  	F_SYSTEM:  "system",
   245  	F_TOLOWER: "tolower",
   246  	F_TOUPPER: "toupper",
   247  
   248  	NAME:   "name",
   249  	NUMBER: "number",
   250  	STRING: "string",
   251  	REGEX:  "regex",
   252  }
   253  
   254  // String returns the string name of this token.
   255  func (t Token) String() string {
   256  	return tokenNames[t]
   257  }