lsym_binary_op.c revision 1.4 1 1.4 rillig /* $NetBSD: lsym_binary_op.c,v 1.4 2022/04/23 09:35:26 rillig Exp $ */
2 1.1 rillig
3 1.1 rillig /*
4 1.1 rillig * Tests for the token lsym_binary_op, which represents a binary operator in
5 1.1 rillig * an expression. Examples for binary operators are '>>', '=', '+', '&&'.
6 1.1 rillig *
7 1.1 rillig * Binary operators are surrounded by blanks.
8 1.1 rillig *
9 1.1 rillig * Some tokens like '+', '*' or '&' can be either binary or unary operators,
10 1.1 rillig * with an entirely different meaning.
11 1.1 rillig *
12 1.1 rillig * The token '*' is not only a binary or a unary operator, it is used in types
13 1.1 rillig * as well, to derive a pointer type.
14 1.1 rillig *
15 1.1 rillig * See also:
16 1.1 rillig * lsym_postfix_op.c for postfix unary operators
17 1.1 rillig * lsym_unary_op.c for prefix unary operators
18 1.1 rillig * lsym_colon.c for ':'
19 1.1 rillig * lsym_question.c for '?'
20 1.1 rillig * lsym_comma.c for ','
21 1.1 rillig * C99 6.4.6 "Punctuators"
22 1.1 rillig */
23 1.1 rillig
24 1.1 rillig #indent input
25 1.4 rillig void
26 1.4 rillig binary_operators(void)
27 1.4 rillig {
28 1.4 rillig /* In the order of appearance in C11 6.5. */
29 1.4 rillig a = a * a;
30 1.4 rillig a = a / a;
31 1.4 rillig a = a % a;
32 1.4 rillig a = a + a;
33 1.4 rillig a = a - a;
34 1.4 rillig a = a << a;
35 1.4 rillig a = a >> a;
36 1.4 rillig a = a < a;
37 1.4 rillig a = a > a;
38 1.4 rillig a = a <= a;
39 1.4 rillig a = a >= a;
40 1.4 rillig a = a == a;
41 1.4 rillig a = a != a;
42 1.4 rillig a = a & a;
43 1.4 rillig a = a ^ a;
44 1.4 rillig a = a | a;
45 1.4 rillig a = a && a;
46 1.4 rillig a = a || a;
47 1.4 rillig a = a ? a : a;
48 1.4 rillig a = a;
49 1.4 rillig a *= a;
50 1.4 rillig a /= a;
51 1.4 rillig a %= a;
52 1.4 rillig a += a;
53 1.4 rillig a -= a;
54 1.4 rillig a <<= a;
55 1.4 rillig a >>= a;
56 1.4 rillig a &= a;
57 1.4 rillig a ^= a;
58 1.4 rillig a |= a;
59 1.4 rillig a = a, a;
60 1.4 rillig }
61 1.1 rillig #indent end
62 1.1 rillig
63 1.1 rillig #indent run-equals-input
64 1.2 rillig
65 1.2 rillig
66 1.2 rillig /*
67 1.2 rillig * If a '*' is immediately followed by another '*', they still form separate
68 1.2 rillig * operators. The first is a binary operator, the second is unary.
69 1.2 rillig */
70 1.2 rillig #indent input
71 1.2 rillig int var = expr**ptr;
72 1.2 rillig #indent end
73 1.2 rillig
74 1.2 rillig #indent run -di0
75 1.2 rillig int var = expr * *ptr;
76 1.2 rillig #indent end
77