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