| The Android Open Source Project | dd7bc33 | 2009-03-03 19:32:55 -0800 | [diff] [blame] | 1 | %{ | 
 | 2 | /*	$NetBSD: arith_lex.l,v 1.12.6.1 2005/04/07 11:38:58 tron Exp $	*/ | 
 | 3 |  | 
 | 4 | /*- | 
 | 5 |  * Copyright (c) 1993 | 
 | 6 |  *	The Regents of the University of California.  All rights reserved. | 
 | 7 |  * | 
 | 8 |  * This code is derived from software contributed to Berkeley by | 
 | 9 |  * Kenneth Almquist. | 
 | 10 |  * | 
 | 11 |  * Redistribution and use in source and binary forms, with or without | 
 | 12 |  * modification, are permitted provided that the following conditions | 
 | 13 |  * are met: | 
 | 14 |  * 1. Redistributions of source code must retain the above copyright | 
 | 15 |  *    notice, this list of conditions and the following disclaimer. | 
 | 16 |  * 2. Redistributions in binary form must reproduce the above copyright | 
 | 17 |  *    notice, this list of conditions and the following disclaimer in the | 
 | 18 |  *    documentation and/or other materials provided with the distribution. | 
 | 19 |  * 3. Neither the name of the University nor the names of its contributors | 
 | 20 |  *    may be used to endorse or promote products derived from this software | 
 | 21 |  *    without specific prior written permission. | 
 | 22 |  * | 
 | 23 |  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | 
 | 24 |  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
 | 25 |  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
 | 26 |  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | 
 | 27 |  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
 | 28 |  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 
 | 29 |  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
 | 30 |  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 
 | 31 |  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
 | 32 |  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
 | 33 |  * SUCH DAMAGE. | 
 | 34 |  */ | 
 | 35 |  | 
 | 36 | #include <sys/cdefs.h> | 
 | 37 | #ifndef lint | 
 | 38 | #if 0 | 
 | 39 | static char sccsid[] = "@(#)arith_lex.l	8.3 (Berkeley) 5/4/95"; | 
 | 40 | #else | 
 | 41 | __RCSID("$NetBSD: arith_lex.l,v 1.12.6.1 2005/04/07 11:38:58 tron Exp $"); | 
 | 42 | #endif | 
 | 43 | #endif /* not lint */ | 
 | 44 |  | 
 | 45 | #include <unistd.h> | 
 | 46 | #include "arith.h" | 
 | 47 | #include "error.h" | 
 | 48 | #include "expand.h" | 
 | 49 | #include "var.h" | 
 | 50 |  | 
 | 51 | extern int yylval; | 
 | 52 | extern char *arith_buf, *arith_startbuf; | 
 | 53 | #undef YY_INPUT | 
 | 54 | #define YY_INPUT(buf,result,max) \ | 
 | 55 | 	result = (*buf = *arith_buf++) ? 1 : YY_NULL; | 
 | 56 | #define YY_NO_UNPUT | 
 | 57 | %} | 
 | 58 | %option noyywrap | 
 | 59 |  | 
 | 60 | %% | 
 | 61 | [ \t\n]	{ ; } | 
 | 62 | 0x[0-9a-fA-F]+	{ yylval = strtol(yytext, 0, 0); return(ARITH_NUM); } | 
 | 63 | 0[0-7]*		{ yylval = strtol(yytext, 0, 0); return(ARITH_NUM); } | 
 | 64 | [1-9][0-9]*	{ yylval = strtol(yytext, 0, 0); return(ARITH_NUM); } | 
 | 65 | [A-Za-z_][A-Za-z_0-9]*	{ char *v = lookupvar(yytext); | 
 | 66 | 			if (v) { | 
 | 67 | 				yylval = strtol(v, &v, 0); | 
 | 68 | 				if (*v == 0) | 
 | 69 | 					return ARITH_NUM; | 
 | 70 | 			} | 
 | 71 | 			error("arith: syntax error: \"%s\"", arith_startbuf); | 
 | 72 | 		} | 
 | 73 | "("	{ return(ARITH_LPAREN); } | 
 | 74 | ")"	{ return(ARITH_RPAREN); } | 
 | 75 | "||"	{ return(ARITH_OR); } | 
 | 76 | "&&"	{ return(ARITH_AND); } | 
 | 77 | "|"	{ return(ARITH_BOR); } | 
 | 78 | "^"	{ return(ARITH_BXOR); } | 
 | 79 | "&"	{ return(ARITH_BAND); } | 
 | 80 | "=="	{ return(ARITH_EQ); } | 
 | 81 | "!="	{ return(ARITH_NE); } | 
 | 82 | ">"	{ return(ARITH_GT); } | 
 | 83 | ">="	{ return(ARITH_GE); } | 
 | 84 | "<"	{ return(ARITH_LT); } | 
 | 85 | "<="	{ return(ARITH_LE); } | 
 | 86 | "<<"	{ return(ARITH_LSHIFT); } | 
 | 87 | ">>"	{ return(ARITH_RSHIFT); } | 
 | 88 | "*"	{ return(ARITH_MUL); } | 
 | 89 | "/"	{ return(ARITH_DIV); } | 
 | 90 | "%"	{ return(ARITH_REM); } | 
 | 91 | "+"	{ return(ARITH_ADD); } | 
 | 92 | "-"	{ return(ARITH_SUB); } | 
 | 93 | "~"	{ return(ARITH_BNOT); } | 
 | 94 | "!"	{ return(ARITH_NOT); } | 
 | 95 | .	{ error("arith: syntax error: \"%s\"", arith_startbuf); } | 
 | 96 | %% | 
 | 97 |  | 
 | 98 | void | 
 | 99 | arith_lex_reset() { | 
 | 100 | #ifdef YY_NEW_FILE | 
 | 101 | 	YY_NEW_FILE; | 
 | 102 | #endif | 
 | 103 | } |