xref: /netbsd-src/bin/sh/arith_tokens.h (revision e79133b55e5185e61376edb84cc1ca5004331614)
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