xref: /aosp_15_r20/external/mksh/src/exprtok.h (revision 7c356e860f31eadd15fd599fcfdb9fd21f16a9d4)
1*7c356e86SAndroid Build Coastguard Worker /*-
2*7c356e86SAndroid Build Coastguard Worker  * Copyright (c) 2016, 2020
3*7c356e86SAndroid Build Coastguard Worker  *	mirabilos <[email protected]>
4*7c356e86SAndroid Build Coastguard Worker  *
5*7c356e86SAndroid Build Coastguard Worker  * Provided that these terms and disclaimer and all copyright notices
6*7c356e86SAndroid Build Coastguard Worker  * are retained or reproduced in an accompanying document, permission
7*7c356e86SAndroid Build Coastguard Worker  * is granted to deal in this work without restriction, including un-
8*7c356e86SAndroid Build Coastguard Worker  * limited rights to use, publicly perform, distribute, sell, modify,
9*7c356e86SAndroid Build Coastguard Worker  * merge, give away, or sublicence.
10*7c356e86SAndroid Build Coastguard Worker  *
11*7c356e86SAndroid Build Coastguard Worker  * This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
12*7c356e86SAndroid Build Coastguard Worker  * the utmost extent permitted by applicable law, neither express nor
13*7c356e86SAndroid Build Coastguard Worker  * implied; without malicious intent or gross negligence. In no event
14*7c356e86SAndroid Build Coastguard Worker  * may a licensor, author or contributor be held liable for indirect,
15*7c356e86SAndroid Build Coastguard Worker  * direct, other damage, loss, or other issues arising in any way out
16*7c356e86SAndroid Build Coastguard Worker  * of dealing in the work, even if advised of the possibility of such
17*7c356e86SAndroid Build Coastguard Worker  * damage or existence of a defect, except proven that it results out
18*7c356e86SAndroid Build Coastguard Worker  * of said person's immediate fault when using the work as intended.
19*7c356e86SAndroid Build Coastguard Worker  */
20*7c356e86SAndroid Build Coastguard Worker 
21*7c356e86SAndroid Build Coastguard Worker #if defined(EXPRTOK_DEFNS)
22*7c356e86SAndroid Build Coastguard Worker __RCSID("$MirOS: src/bin/mksh/exprtok.h,v 1.4 2020/04/07 11:56:46 tg Exp $");
23*7c356e86SAndroid Build Coastguard Worker /* see range comment below */
24*7c356e86SAndroid Build Coastguard Worker #define IS_ASSIGNOP(op) ((int)(op) >= (int)O_ASN && (int)(op) <= (int)O_BORASN)
25*7c356e86SAndroid Build Coastguard Worker #define FN(name,len,prec,enum)		/* nothing */
26*7c356e86SAndroid Build Coastguard Worker #define F1(enum)			/* nothing */
27*7c356e86SAndroid Build Coastguard Worker #elif defined(EXPRTOK_ENUM)
28*7c356e86SAndroid Build Coastguard Worker #define F0(name,len,prec,enum)		enum = 0,
29*7c356e86SAndroid Build Coastguard Worker #define FN(name,len,prec,enum)		enum,
30*7c356e86SAndroid Build Coastguard Worker #define F1(enum)			enum,
31*7c356e86SAndroid Build Coastguard Worker #define F2(enum)			enum,
32*7c356e86SAndroid Build Coastguard Worker #define F9(enum)			enum
33*7c356e86SAndroid Build Coastguard Worker #elif defined(EXPRTOK_NAME)
34*7c356e86SAndroid Build Coastguard Worker #define FN(name,len,prec,enum)		name,
35*7c356e86SAndroid Build Coastguard Worker #define F1(enum)			""
36*7c356e86SAndroid Build Coastguard Worker #elif defined(EXPRTOK_LEN)
37*7c356e86SAndroid Build Coastguard Worker #define FN(name,len,prec,enum)		len,
38*7c356e86SAndroid Build Coastguard Worker #define F1(enum)			0
39*7c356e86SAndroid Build Coastguard Worker #elif defined(EXPRTOK_PREC)
40*7c356e86SAndroid Build Coastguard Worker #define FN(name,len,prec,enum)		prec,
41*7c356e86SAndroid Build Coastguard Worker #define F1(enum)			P_PRIMARY
42*7c356e86SAndroid Build Coastguard Worker #endif
43*7c356e86SAndroid Build Coastguard Worker 
44*7c356e86SAndroid Build Coastguard Worker #ifndef F0
45*7c356e86SAndroid Build Coastguard Worker #define F0 FN
46*7c356e86SAndroid Build Coastguard Worker #endif
47*7c356e86SAndroid Build Coastguard Worker 
48*7c356e86SAndroid Build Coastguard Worker #ifndef F2
49*7c356e86SAndroid Build Coastguard Worker #define F2(enum)			/* nothing */
50*7c356e86SAndroid Build Coastguard Worker #define F9(enum)			/* nothing */
51*7c356e86SAndroid Build Coastguard Worker #endif
52*7c356e86SAndroid Build Coastguard Worker 
53*7c356e86SAndroid Build Coastguard Worker /* tokens must be ordered so the longest are first (e.g. += before +) */
54*7c356e86SAndroid Build Coastguard Worker 
55*7c356e86SAndroid Build Coastguard Worker /* some (long) unary operators */
56*7c356e86SAndroid Build Coastguard Worker F0("++", 2, P_PRIMARY, O_PLUSPLUS)	/* before + */
57*7c356e86SAndroid Build Coastguard Worker FN("--", 2, P_PRIMARY, O_MINUSMINUS)	/* before - */
58*7c356e86SAndroid Build Coastguard Worker /* binary operators */
59*7c356e86SAndroid Build Coastguard Worker FN("==", 2, P_EQUALITY, O_EQ)		/* before = */
60*7c356e86SAndroid Build Coastguard Worker FN("!=", 2, P_EQUALITY, O_NE)		/* before ! */
61*7c356e86SAndroid Build Coastguard Worker /* assignments are assumed to be in range O_ASN .. O_BORASN */
62*7c356e86SAndroid Build Coastguard Worker FN("=", 1, P_ASSIGN, O_ASN)
63*7c356e86SAndroid Build Coastguard Worker FN("*=", 2, P_ASSIGN, O_TIMESASN)
64*7c356e86SAndroid Build Coastguard Worker FN("/=", 2, P_ASSIGN, O_DIVASN)
65*7c356e86SAndroid Build Coastguard Worker FN("%=", 2, P_ASSIGN, O_MODASN)
66*7c356e86SAndroid Build Coastguard Worker FN("+=", 2, P_ASSIGN, O_PLUSASN)
67*7c356e86SAndroid Build Coastguard Worker FN("-=", 2, P_ASSIGN, O_MINUSASN)
68*7c356e86SAndroid Build Coastguard Worker #ifndef MKSH_LEGACY_MODE
69*7c356e86SAndroid Build Coastguard Worker FN("^<=", 3, P_ASSIGN, O_ROLASN)	/* before ^< */
70*7c356e86SAndroid Build Coastguard Worker FN("^>=", 3, P_ASSIGN, O_RORASN)	/* before ^> */
71*7c356e86SAndroid Build Coastguard Worker #endif
72*7c356e86SAndroid Build Coastguard Worker FN("<<=", 3, P_ASSIGN, O_LSHIFTASN)
73*7c356e86SAndroid Build Coastguard Worker FN(">>=", 3, P_ASSIGN, O_RSHIFTASN)
74*7c356e86SAndroid Build Coastguard Worker FN("&=", 2, P_ASSIGN, O_BANDASN)
75*7c356e86SAndroid Build Coastguard Worker FN("^=", 2, P_ASSIGN, O_BXORASN)
76*7c356e86SAndroid Build Coastguard Worker FN("|=", 2, P_ASSIGN, O_BORASN)
77*7c356e86SAndroid Build Coastguard Worker /* binary non-assignment operators */
78*7c356e86SAndroid Build Coastguard Worker #ifndef MKSH_LEGACY_MODE
79*7c356e86SAndroid Build Coastguard Worker FN("^<", 2, P_SHIFT, O_ROL)		/* before ^ */
80*7c356e86SAndroid Build Coastguard Worker FN("^>", 2, P_SHIFT, O_ROR)		/* before ^ */
81*7c356e86SAndroid Build Coastguard Worker #endif
82*7c356e86SAndroid Build Coastguard Worker FN("<<", 2, P_SHIFT, O_LSHIFT)
83*7c356e86SAndroid Build Coastguard Worker FN(">>", 2, P_SHIFT, O_RSHIFT)
84*7c356e86SAndroid Build Coastguard Worker FN("<=", 2, P_RELATION, O_LE)
85*7c356e86SAndroid Build Coastguard Worker FN(">=", 2, P_RELATION, O_GE)
86*7c356e86SAndroid Build Coastguard Worker FN("<", 1, P_RELATION, O_LT)
87*7c356e86SAndroid Build Coastguard Worker FN(">", 1, P_RELATION, O_GT)
88*7c356e86SAndroid Build Coastguard Worker FN("&&", 2, P_LAND, O_LAND)
89*7c356e86SAndroid Build Coastguard Worker FN("||", 2, P_LOR, O_LOR)
90*7c356e86SAndroid Build Coastguard Worker FN("*", 1, P_MULT, O_TIMES)
91*7c356e86SAndroid Build Coastguard Worker FN("/", 1, P_MULT, O_DIV)
92*7c356e86SAndroid Build Coastguard Worker FN("%", 1, P_MULT, O_MOD)
93*7c356e86SAndroid Build Coastguard Worker FN("+", 1, P_ADD, O_PLUS)
94*7c356e86SAndroid Build Coastguard Worker FN("-", 1, P_ADD, O_MINUS)
95*7c356e86SAndroid Build Coastguard Worker FN("&", 1, P_BAND, O_BAND)
96*7c356e86SAndroid Build Coastguard Worker FN("^", 1, P_BXOR, O_BXOR)
97*7c356e86SAndroid Build Coastguard Worker FN("|", 1, P_BOR, O_BOR)
98*7c356e86SAndroid Build Coastguard Worker FN("?", 1, P_TERN, O_TERN)
99*7c356e86SAndroid Build Coastguard Worker FN(",", 1, P_COMMA, O_COMMA)
100*7c356e86SAndroid Build Coastguard Worker /* things after this aren't used as binary operators */
101*7c356e86SAndroid Build Coastguard Worker /* unary that are not also binaries */
102*7c356e86SAndroid Build Coastguard Worker FN("~", 1, P_PRIMARY, O_BNOT)
103*7c356e86SAndroid Build Coastguard Worker FN("!", 1, P_PRIMARY, O_LNOT)
104*7c356e86SAndroid Build Coastguard Worker /* misc */
105*7c356e86SAndroid Build Coastguard Worker FN("(", 1, P_PRIMARY, OPEN_PAREN)
106*7c356e86SAndroid Build Coastguard Worker FN(")", 1, P_PRIMARY, CLOSE_PAREN)
107*7c356e86SAndroid Build Coastguard Worker FN(":", 1, P_PRIMARY, CTERN)
108*7c356e86SAndroid Build Coastguard Worker /* things that don't appear in the opinfo[] table */
109*7c356e86SAndroid Build Coastguard Worker F1(VAR)				/*XXX should be F2 */
110*7c356e86SAndroid Build Coastguard Worker F2(LIT)
111*7c356e86SAndroid Build Coastguard Worker F2(END)
112*7c356e86SAndroid Build Coastguard Worker F9(BAD)
113*7c356e86SAndroid Build Coastguard Worker 
114*7c356e86SAndroid Build Coastguard Worker #undef FN
115*7c356e86SAndroid Build Coastguard Worker #undef F0
116*7c356e86SAndroid Build Coastguard Worker #undef F1
117*7c356e86SAndroid Build Coastguard Worker #undef F2
118*7c356e86SAndroid Build Coastguard Worker #undef F9
119*7c356e86SAndroid Build Coastguard Worker #undef EXPRTOK_DEFNS
120*7c356e86SAndroid Build Coastguard Worker #undef EXPRTOK_ENUM
121*7c356e86SAndroid Build Coastguard Worker #undef EXPRTOK_NAME
122*7c356e86SAndroid Build Coastguard Worker #undef EXPRTOK_LEN
123*7c356e86SAndroid Build Coastguard Worker #undef EXPRTOK_PREC
124