1 1.3 kre /* $NetBSD: arith_tokens.h,v 1.3 2017/07/24 13:21:14 kre Exp $ */ 2 1.1 kre 3 1.1 kre /*- 4 1.1 kre * Copyright (c) 1993 5 1.1 kre * The Regents of the University of California. All rights reserved. 6 1.1 kre * Copyright (c) 2007 7 1.1 kre * Herbert Xu <herbert (at) gondor.apana.org.au>. All rights reserved. 8 1.1 kre * 9 1.1 kre * This code is derived from software contributed to Berkeley by 10 1.1 kre * Kenneth Almquist. 11 1.1 kre * 12 1.1 kre * Redistribution and use in source and binary forms, with or without 13 1.1 kre * modification, are permitted provided that the following conditions 14 1.1 kre * are met: 15 1.1 kre * 1. Redistributions of source code must retain the above copyright 16 1.1 kre * notice, this list of conditions and the following disclaimer. 17 1.1 kre * 2. Redistributions in binary form must reproduce the above copyright 18 1.1 kre * notice, this list of conditions and the following disclaimer in the 19 1.1 kre * documentation and/or other materials provided with the distribution. 20 1.1 kre * 3. Neither the name of the University nor the names of its contributors 21 1.1 kre * may be used to endorse or promote products derived from this software 22 1.1 kre * without specific prior written permission. 23 1.1 kre * 24 1.1 kre * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25 1.1 kre * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 1.1 kre * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27 1.1 kre * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28 1.1 kre * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 1.1 kre * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 1.1 kre * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 1.1 kre * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 1.1 kre * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 1.1 kre * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 1.1 kre * SUCH DAMAGE. 35 1.1 kre * 36 1.1 kre * From FreeBSD who obtained it from dash (modified both times.) 37 1.1 kre */ 38 1.1 kre 39 1.1 kre /* 40 1.1 kre * Tokens returned from arith_token() 41 1.1 kre * 42 1.1 kre * Caution, values are not arbitrary. 43 1.1 kre */ 44 1.1 kre 45 1.1 kre #define ARITH_BAD 0 46 1.1 kre 47 1.1 kre #define ARITH_ASS 1 48 1.1 kre 49 1.1 kre #define ARITH_OR 2 50 1.1 kre #define ARITH_AND 3 51 1.1 kre #define ARITH_NUM 5 52 1.1 kre #define ARITH_VAR 6 53 1.1 kre #define ARITH_NOT 7 54 1.1 kre 55 1.1 kre #define ARITH_BINOP_MIN 8 56 1.1 kre 57 1.1 kre #define ARITH_LE 8 58 1.1 kre #define ARITH_GE 9 59 1.1 kre #define ARITH_LT 10 60 1.1 kre #define ARITH_GT 11 61 1.1 kre #define ARITH_EQ 12 /* Must be ARITH_ASS + ARITH_ASS_GAP */ 62 1.1 kre 63 1.1 kre #define ARITH_ASS_BASE 13 64 1.1 kre 65 1.1 kre #define ARITH_REM 13 66 1.1 kre #define ARITH_BAND 14 67 1.1 kre #define ARITH_LSHIFT 15 68 1.1 kre #define ARITH_RSHIFT 16 69 1.1 kre #define ARITH_MUL 17 70 1.1 kre #define ARITH_ADD 18 71 1.1 kre #define ARITH_BOR 19 72 1.1 kre #define ARITH_SUB 20 73 1.1 kre #define ARITH_BXOR 21 74 1.1 kre #define ARITH_DIV 22 75 1.1 kre 76 1.1 kre #define ARITH_NE 23 77 1.1 kre 78 1.1 kre #define ARITH_BINOP_MAX 24 79 1.1 kre 80 1.1 kre #define ARITH_ASS_MIN ARITH_BINOP_MAX 81 1.1 kre #define ARITH_ASS_GAP (ARITH_ASS_MIN - ARITH_ASS_BASE) 82 1.1 kre 83 1.1 kre #define ARITH_REMASS (ARITH_ASS_GAP + ARITH_REM) 84 1.1 kre #define ARITH_BANDASS (ARITH_ASS_GAP + ARITH_BAND) 85 1.1 kre #define ARITH_LSHIFTASS (ARITH_ASS_GAP + ARITH_LSHIFT) 86 1.1 kre #define ARITH_RSHIFTASS (ARITH_ASS_GAP + ARITH_RSHIFT) 87 1.1 kre #define ARITH_MULASS (ARITH_ASS_GAP + ARITH_MUL) 88 1.1 kre #define ARITH_ADDASS (ARITH_ASS_GAP + ARITH_ADD) 89 1.1 kre #define ARITH_BORASS (ARITH_ASS_GAP + ARITH_BOR) 90 1.1 kre #define ARITH_SUBASS (ARITH_ASS_GAP + ARITH_SUB) 91 1.1 kre #define ARITH_BXORASS (ARITH_ASS_GAP + ARITH_BXOR) 92 1.1 kre #define ARITH_DIVASS (ARITH_ASS_GAP + ARITH_BXOR) 93 1.1 kre 94 1.1 kre #define ARITH_ASS_MAX 34 95 1.1 kre 96 1.1 kre #define ARITH_LPAREN 34 97 1.1 kre #define ARITH_RPAREN 35 98 1.1 kre #define ARITH_BNOT 36 99 1.1 kre #define ARITH_QMARK 37 100 1.1 kre #define ARITH_COLON 38 101 1.3 kre #define ARITH_INCR 39 102 1.3 kre #define ARITH_DECR 40 103 1.3 kre #define ARITH_COMMA 41 104 1.1 kre 105 1.1 kre /* 106 1.1 kre * Globals shared between arith parser, and lexer 107 1.1 kre */ 108 1.1 kre 109 1.1 kre extern const char *arith_buf; 110 1.1 kre 111 1.1 kre union a_token_val { 112 1.1 kre intmax_t val; 113 1.1 kre char *name; 114 1.1 kre }; 115 1.1 kre 116 1.1 kre extern union a_token_val a_t_val; 117 1.1 kre 118 1.2 kre extern int arith_lno, arith_var_lno; 119 1.2 kre 120 1.1 kre int arith_token(void); 121