summaryrefslogtreecommitdiff
blob: 438b39b0e7728701ae83dcd1e17d4d27a22392bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Change operator order so that binary 'or' and binary 'and' are 
not on the same level, but so that 'and' comes before 'or'.
This is to match the standard C precedence.

Also add support for the % (modulus), < (binary left shift), 
and > (binary right shift) operators.

Patch by Mike Frysinger <vapier@gentoo.org>

--- pcalc-000/README
+++ pcalc-000/README
@@ -60,10 +60,12 @@
 Operator priorities:
 
-     LOW    '='        assignment
-            or  and    binary or/binary and
-            '+' '-'    addition/subtruction
-            '*' '/'    multiply/divide
-            '-'        unary minus
-     HIGH   '^'        exponentation
+     LOW    '='         assignment
+            or          binary or
+            and         binary and
+            '>' '<'     binary left/right shift
+            '+' '-'     addition/subtruction
+            '*' '/' '%' multiply/divide/modulus
+            '-'         unary minus
+     HIGH   '^'         exponentation
 
 Syntax:
--- pcalc-000/help.c
+++ pcalc-000/help.c
@@ -40,5 +40,5 @@
 \n\
 Operators:\n\
-    '+' '-' '*' '/' '^'\n\
+    '+' '-' '*' '/' '%' '^'\n\
 \n\
 Constants: (case sensitive)\n\
@@ -81,10 +81,12 @@
 Operator priorities:\n\
 \n\
-    right  assotiation:     '='        ASSIGNMENT\n\
-    left   assotiation:     or  and    BINARY OR/BINARY AND\n\
-    left   assotiation:     '+' '-'    ADDITION/SUBTRUCTION\n\
-    left   assotiation:     '*' '/'    MULTIPLY/DIVIDE\n\
-    left   assotiation:     '-'        UNARY MINUS\n\
-    right  assotiation:     '^'        EXPONENTATION\n\
+    right  assotiation:     '='         ASSIGNMENT\n\
+    left   assotiation:     or          BINARY OR\n\
+    left   assotiation:     and         BINARY AND\n\
+    left   assotiation:     '<' '>'     BINARY LEFT/RIGHT SHIFT\n\
+    left   assotiation:     '+' '-'     ADDITION/SUBTRUCTION\n\
+    left   assotiation:     '*' '/' '%' MULTIPLY/DIVIDE\n\
+    left   assotiation:     '-'         UNARY MINUS\n\
+    right  assotiation:     '^'         EXPONENTATION\n\
 \n\
 ");
--- pcalc-000/pcalc.txt
+++ pcalc-000/pcalc.txt
@@ -59,10 +59,12 @@
 Operator priorities:
 
-     LOW    '='        assignment
-            or  and    binary or/binary and
-            '+' '-'    addition/subtruction
-            '*' '/'    multiply/divide
-            '-'        unary minus
-     HIGH   '^'        exponentation
+     LOW    '='         assignment
+            or          binary or
+            and         binary and
+            '<' '>'     binary left/right shift
+            '+' '-'     addition/subtruction
+            '*' '/' '%' multiply/divide/modulus
+            '-'         unary minus
+     HIGH   '^'         exponentation
 
 Syntax:
--- pcalc-000/pcalc.y
+++ pcalc-000/pcalc.y
@@ -59,7 +59,9 @@
 
 %right  '='
-%left   '|' '&'
+%left   '|'
+%left   '&'
+%left   '<' '>'
 %left   '+' '-'
-%left   '*' '/'
+%left   '*' '/' '%'
 %left   UNARYMINUS
 %right  '^'                                             /*  exponentiation */
@@ -113,4 +113,6 @@
         |   expr '|' expr           { $$ = (long)$1 | (long)$3 ;}
         |   expr '&' expr           { $$ = (long)$1 & (long)$3 ;}
+        |   expr '<' expr           { $$ = (long)$1 << (long)$3 ; }
+        |   expr '>' expr           { $$ = (long)$1 >> (long)$3 ; }
         |   expr '+' expr           { $$ = $1 + $3 ; }
         |   expr '-' expr           { $$ = $1 - $3 ; }
@@ -119,4 +120,5 @@
                                     $$ = $1 / $3 ;
                                     }
+        |   expr '%' expr           { $$ = (long)$1 % (long)$3 ; }
         |   expr '^' expr           { $$ = Pow( $1, $3) ; }
         |   '(' expr ')'            { $$ = $2 ; }