1 %{ 2 #include "stdio.h" // for fileno() prototype 3 #include "string.h" // for strdup() prototype 4 #include "mlr_dsl_parse.h" 5 #include "../dsl/mlr_dsl_ast.h" 6 // http://flex.sourceforge.net/manual/Extra-Data.html 7 8 // NOTE: any new keywords defined here should also be documented 9 // in dsl/mlr_dsl_cst.c's mlr_dsl_keyword_usage() et al. 10 %} 11 12 %option reentrant 13 %option noyywrap 14 %option extra-type="struct _mlr_dsl_ast_node_t **" 15 16 %% 17 18 ";" { 19 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 20 return MD_TOKEN_SEMICOLON; 21 } 22 "{" { 23 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 24 return MD_TOKEN_LBRACE; 25 } 26 "}" { 27 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 28 return MD_TOKEN_RBRACE; 29 } 30 31 "=" { 32 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_SREC_ASSIGNMENT); 33 return MD_TOKEN_ASSIGN; 34 } 35 "filter" { 36 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FILTER); 37 return MD_TOKEN_FILTER; 38 } 39 "unset" { 40 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_UNSET); 41 return MD_TOKEN_UNSET; 42 } 43 "tee" { 44 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_TEE); 45 return MD_TOKEN_TEE; 46 } 47 "emitf" { 48 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMITF); 49 return MD_TOKEN_EMITF; 50 } 51 "emitp" { 52 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMITP); 53 return MD_TOKEN_EMITP; 54 } 55 "emit" { 56 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMIT); 57 return MD_TOKEN_EMIT; 58 } 59 "dump" { 60 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_DUMP); 61 return MD_TOKEN_DUMP; 62 } 63 "edump" { 64 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EDUMP); 65 return MD_TOKEN_EDUMP; 66 } 67 "print" { 68 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_PRINT); 69 return MD_TOKEN_PRINT; 70 } 71 "printn" { 72 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_PRINTN); 73 return MD_TOKEN_PRINTN; 74 } 75 "eprint" { 76 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EPRINT); 77 return MD_TOKEN_EPRINT; 78 } 79 "eprintn" { 80 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EPRINTN); 81 return MD_TOKEN_EPRINTN; 82 } 83 "stdout" { 84 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STDOUT); 85 return MD_TOKEN_STDOUT; 86 } 87 "stderr" { 88 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STDERR); 89 return MD_TOKEN_STDERR; 90 } 91 92 "func" { 93 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 94 return MD_TOKEN_FUNC_DEF; 95 } 96 "subr" { 97 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 98 return MD_TOKEN_SUBR_DEF; 99 } 100 "call" { 101 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 102 return MD_TOKEN_SUBR_CALL; 103 } 104 "return" { 105 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 106 return MD_TOKEN_RETURN; 107 } 108 "begin" { 109 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 110 return MD_TOKEN_BEGIN; 111 } 112 "end" { 113 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 114 return MD_TOKEN_END; 115 } 116 "all" { 117 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_ALL); 118 return MD_TOKEN_ALL; 119 } 120 121 "do" { 122 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_DO_WHILE); 123 return MD_TOKEN_DO; 124 } 125 "while" { 126 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_WHILE); 127 return MD_TOKEN_WHILE; 128 } 129 "for" { 130 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 131 return MD_TOKEN_FOR; 132 } 133 "in" { 134 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IN); 135 return MD_TOKEN_IN; 136 } 137 "break" { 138 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BREAK); 139 return MD_TOKEN_BREAK; 140 } 141 "continue" { 142 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTINUE); 143 return MD_TOKEN_CONTINUE; 144 } 145 "if" { 146 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); 147 return MD_TOKEN_IF; 148 } 149 "elif" { 150 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); 151 return MD_TOKEN_ELIF; 152 } 153 "else" { 154 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_IF_ITEM); 155 return MD_TOKEN_ELSE; 156 } 157 158 "?" { 159 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 160 return MD_TOKEN_QUESTION_MARK; 161 } 162 163 ":" { 164 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 165 return MD_TOKEN_COLON; 166 } 167 168 "||" { 169 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 170 return MD_TOKEN_LOGICAL_OR; 171 } 172 "||=" { 173 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 174 return MD_TOKEN_LOGICAL_OR_EQUALS; 175 } 176 "^^" { 177 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 178 return MD_TOKEN_LOGICAL_XOR; 179 } 180 "^^=" { 181 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 182 return MD_TOKEN_LOGICAL_XOR_EQUALS; 183 } 184 "&&" { 185 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 186 return MD_TOKEN_LOGICAL_AND; 187 } 188 "&&=" { 189 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 190 return MD_TOKEN_LOGICAL_AND_EQUALS; 191 } 192 193 "=~" { 194 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 195 return MD_TOKEN_MATCHES; 196 } 197 "!=~" { 198 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 199 return MD_TOKEN_DOES_NOT_MATCH; 200 } 201 "==" { 202 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 203 return MD_TOKEN_EQ; 204 } 205 "!=" { 206 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 207 return MD_TOKEN_NE; 208 } 209 210 ">" { 211 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 212 return MD_TOKEN_GT; 213 } 214 ">=" { 215 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 216 return MD_TOKEN_GE; 217 } 218 "<" { 219 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 220 return MD_TOKEN_LT; 221 } 222 "<=" { 223 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 224 return MD_TOKEN_LE; 225 } 226 227 "|" { 228 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 229 return MD_TOKEN_BITWISE_OR; 230 } 231 "|=" { 232 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 233 return MD_TOKEN_BITWISE_OR_EQUALS; 234 } 235 236 "^" { 237 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 238 return MD_TOKEN_BITWISE_XOR; 239 } 240 "^=" { 241 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 242 return MD_TOKEN_BITWISE_XOR_EQUALS; 243 } 244 245 "&" { 246 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 247 return MD_TOKEN_BITWISE_AND; 248 } 249 "&=" { 250 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 251 return MD_TOKEN_BITWISE_AND_EQUALS; 252 } 253 254 "<<" { 255 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 256 return MD_TOKEN_BITWISE_LSH; 257 } 258 "<<=" { 259 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 260 return MD_TOKEN_BITWISE_LSH_EQUALS; 261 } 262 ">>" { 263 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 264 return MD_TOKEN_BITWISE_RSH; 265 } 266 ">>=" { 267 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 268 return MD_TOKEN_BITWISE_RSH_EQUALS; 269 } 270 271 "+" { 272 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 273 return MD_TOKEN_PLUS; 274 } 275 "+=" { 276 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 277 return MD_TOKEN_PLUS_EQUALS; 278 } 279 "-" { 280 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 281 return MD_TOKEN_MINUS; 282 } 283 "-=" { 284 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 285 return MD_TOKEN_MINUS_EQUALS; 286 } 287 "\." { 288 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 289 return MD_TOKEN_DOT; 290 } 291 "\.=" { 292 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 293 return MD_TOKEN_DOT_EQUALS; 294 } 295 "*" { 296 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 297 return MD_TOKEN_TIMES; 298 } 299 "*=" { 300 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 301 return MD_TOKEN_TIMES_EQUALS; 302 } 303 "/" { 304 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 305 return MD_TOKEN_DIVIDE; 306 } 307 "/=" { 308 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 309 return MD_TOKEN_DIVIDE_EQUALS; 310 } 311 "//" { 312 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 313 return MD_TOKEN_INT_DIVIDE; 314 } 315 "//=" { 316 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 317 return MD_TOKEN_INT_DIVIDE_EQUALS; 318 } 319 320 "\.+" { 321 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 322 return MD_TOKEN_OPLUS; 323 } 324 "\.+=" { 325 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 326 return MD_TOKEN_OPLUS_EQUALS; 327 } 328 "\.-" { 329 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 330 return MD_TOKEN_OMINUS; 331 } 332 "\.-=" { 333 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 334 return MD_TOKEN_OMINUS_EQUALS; 335 } 336 "\.*" { 337 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 338 return MD_TOKEN_OTIMES; 339 } 340 "\.*=" { 341 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 342 return MD_TOKEN_OTIMES_EQUALS; 343 } 344 "\./" { 345 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 346 return MD_TOKEN_ODIVIDE; 347 } 348 "\./=" { 349 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 350 return MD_TOKEN_ODIVIDE_EQUALS; 351 } 352 "\.//" { 353 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 354 return MD_TOKEN_INT_ODIVIDE; 355 } 356 "\.//=" { 357 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 358 return MD_TOKEN_INT_ODIVIDE_EQUALS; 359 } 360 361 "%" { 362 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 363 return MD_TOKEN_MOD; 364 } 365 "%=" { 366 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 367 return MD_TOKEN_MOD_EQUALS; 368 } 369 370 "!" { 371 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 372 return MD_TOKEN_LOGICAL_NOT; 373 } 374 375 "~" { 376 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 377 return MD_TOKEN_BITWISE_NOT; 378 } 379 380 "**" { 381 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 382 return MD_TOKEN_POW; 383 } 384 "**=" { 385 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR); 386 return MD_TOKEN_POW_EQUALS; 387 } 388 389 \$\* { 390 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FULL_SREC); 391 return MD_TOKEN_FULL_SREC; 392 } 393 \$ { 394 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 395 return MD_TOKEN_DOLLAR_SIGN; 396 } 397 398 \$[a-zA-Z_0-9]+ { 399 // Note: the parser depends on the dollar sign being here. If this is changed, 400 // that needs to be changed as well. 401 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); 402 return MD_TOKEN_FIELD_NAME; 403 } 404 \$\{([^\}]|\\.)*\} { 405 // Note: the parser depends on the dollar sign being here. If this is changed, 406 // that needs to be changed as well. 407 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME); 408 return MD_TOKEN_BRACED_FIELD_NAME; 409 } 410 411 @[a-zA-Z_0-9]+ { 412 // Note: the parser depends on the at-sign being here. If this is changed, 413 // that needs to be changed as well. 414 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); 415 return MD_TOKEN_UNBRACED_OOSVAR_NAME; 416 } 417 @\{([^\}]|\\.)*\} { 418 // Note: the parser depends on the percent-sign being here. If this is changed, 419 // that needs to be changed as well. 420 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); 421 return MD_TOKEN_BRACED_OOSVAR_NAME; 422 } 423 @ { 424 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 425 return MD_TOKEN_AT_SIGN; 426 } 427 \@\* { 428 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FULL_OOSVAR); 429 return MD_TOKEN_FULL_OOSVAR; 430 } 431 432 "\[" { 433 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 434 return MD_TOKEN_LEFT_BRACKET; 435 } 436 "\]" { 437 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 438 return MD_TOKEN_RIGHT_BRACKET; 439 } 440 441 [0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+[eE][0-9]+|[0-9]+[eE]-[0-9]+|[0-9]+\.[0-9]*[eE][0-9]+|[0-9]+\.[0-9]*[eE]-[0-9]+|[0-9]*\.[0-9]+[eE][0-9]+|[0-9]*\.[0-9]+[eE]-[0-9]+ { 442 // Leading minus sign is handled via the unary-minus operator, not here. 443 // 123 444 // 123. 123.4 445 // .234 446 // 1e2 447 // 1e-2 448 // 1.2e3 1.e3 449 // 1.2e-3 1.e-3 450 // .2e3 451 // .2e-3 1.e-3 452 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); 453 return MD_TOKEN_NUMBER; 454 } 455 0x[0-9a-fA-F]+ { 456 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LITERAL); 457 return MD_TOKEN_NUMBER; 458 } 459 460 \"([^\\\"]|\\.)*\" { 461 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LITERAL); 462 return MD_TOKEN_STRING; 463 } 464 465 \"([^\\\"]|\\.)*\"\i { 466 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_REGEXI); 467 return MD_TOKEN_REGEXI; 468 } 469 470 "map" { 471 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 472 return MD_TOKEN_MAP; 473 } 474 "var" { 475 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 476 return MD_TOKEN_VAR; 477 } 478 "num" { 479 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NUMERIC_LOCAL_DEFINITION); 480 return MD_TOKEN_NUMERIC; 481 } 482 "int" { 483 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_INT_LOCAL_DEFINITION); 484 return MD_TOKEN_INT; 485 } 486 "float" { 487 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION); 488 return MD_TOKEN_FLOAT; 489 } 490 "bool" { 491 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION); 492 return MD_TOKEN_BOOLEAN; 493 } 494 "str" { 495 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION); 496 return MD_TOKEN_STRING; 497 } 498 499 "true" { 500 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL); 501 return MD_TOKEN_TRUE; 502 } 503 "false" { 504 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL); 505 return MD_TOKEN_FALSE; 506 } 507 508 "IPS" { 509 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 510 return MD_TOKEN_CONTEXT_VARIABLE; 511 } 512 "IFS" { 513 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 514 return MD_TOKEN_CONTEXT_VARIABLE; 515 } 516 "IRS" { 517 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 518 return MD_TOKEN_CONTEXT_VARIABLE; 519 } 520 "OPS" { 521 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 522 return MD_TOKEN_CONTEXT_VARIABLE; 523 } 524 "OFS" { 525 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 526 return MD_TOKEN_CONTEXT_VARIABLE; 527 } 528 "ORS" { 529 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 530 return MD_TOKEN_CONTEXT_VARIABLE; 531 } 532 533 "NF" { 534 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 535 return MD_TOKEN_CONTEXT_VARIABLE; 536 } 537 "NR" { 538 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 539 return MD_TOKEN_CONTEXT_VARIABLE; 540 } 541 "FNR" { 542 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 543 return MD_TOKEN_CONTEXT_VARIABLE; 544 } 545 "FILENAME" { 546 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 547 return MD_TOKEN_CONTEXT_VARIABLE; 548 } 549 "FILENUM" { 550 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 551 return MD_TOKEN_CONTEXT_VARIABLE; 552 } 553 "M_PI" { 554 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 555 return MD_TOKEN_CONTEXT_VARIABLE; 556 } 557 "M_E" { 558 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE); 559 return MD_TOKEN_CONTEXT_VARIABLE; 560 } 561 "ENV" { 562 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_ENV); 563 return MD_TOKEN_ENV; 564 } 565 566 [a-zA-Z_][a-zA-Z_0-9]* { 567 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_NON_SIGIL_NAME); 568 return MD_TOKEN_NON_SIGIL_NAME; 569 } 570 571 "(" { 572 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 573 return MD_TOKEN_LPAREN; 574 } 575 ")" { 576 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 577 return MD_TOKEN_RPAREN; 578 } 579 580 "," { 581 *yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY); 582 return MD_TOKEN_COMMA; 583 } 584 585 #.*\n { } 586 587 [ \t\r\n] { } 588 589 . { 590 return -1; 591 } 592 %% 593