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 }