tokenizer.l revision 1.3
1%{ 2/* $OpenBSD: tokenizer.l,v 1.3 2006/01/20 23:10:19 espie Exp $ */ 3/* 4 * Copyright (c) 2004 Marc Espie <espie@cvs.openbsd.org> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18#include "parser.h" 19#include <stdlib.h> 20#include <errno.h> 21#include <stdint.h> 22#include <limits.h> 23 24extern int32_t yylval; 25 26int32_t number(void); 27%} 28 29delim [ \t\n] 30ws {delim}+ 31hex 0[xX][0-9a-fA-F]+ 32oct 0[0-7]* 33dec [1-9][0-9]* 34 35%% 36{ws} {/* just skip it */} 37{hex}|{oct}|{dec} { yylval = number(); return(NUMBER); } 38"<=" { return(LE); } 39">=" { return(GE); } 40"<<" { return(LSHIFT); } 41">>" { return(RSHIFT); } 42"==" { return(EQ); } 43"!=" { return(NE); } 44"&&" { return(LAND); } 45"||" { return(LOR); } 46. { return yytext[0]; } 47%% 48 49int32_t 50number() 51{ 52 long l; 53 54 errno = 0; 55 l = strtol(yytext, NULL, 0); 56 if (((l == LONG_MAX || l == LONG_MIN) && errno == ERANGE) || 57 l > INT32_MAX || l < INT32_MIN) { 58 fprintf(stderr, "m4: numeric overflow in expr: %s\n", yytext); 59 } 60 return l; 61 62} 63