-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOperators.java
171 lines (147 loc) · 4.72 KB
/
Operators.java
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
class Operators {
private static final String[] AND = {"AND", "&", "∧", "·"};
private static final String[] OR = {"OR", "||", "∨", "+"};
private static final String[] NOT = {"NOT", "¬", "~", "!"};
private static final String[] XOR = {"XOR", "^", "⨁"};
private static final String[] XNOR = {"XNOR", "⨀"};
private static final String[] NAND = {"NAND", "!&", "~&", "¬&"};
private static final String[] NOR = {"NOR", "!|", "~|", "¬|"};
private static final String[] IMPLIES = {"IMPLIES", "⇒", "→", "⊃"};
private static final String[] CONVERSE = {"CONVERSE", "⟸", "←"};
private static final String[] IFF = {"IFF", "⇔", "↔", "≡"};
public static boolean NOT ( boolean p ) {
return !p;
}
public static boolean OR ( boolean... p ) {
for ( boolean value : p )
if (value)
return true;
return false;
}
public static boolean AND ( boolean... p ) {
for ( boolean value : p )
if (!value)
return false;
return true;
}
public static boolean NAND ( boolean... p ) {
return !AND( p );
}
public static boolean NOR ( boolean... p ) {
return !OR( p );
}
public static boolean XOR ( boolean... p ) {
boolean _p = false;
for ( boolean value : p )
_p ^= value;
return _p;
}
public static boolean XNOR ( boolean... p ) {
return !XOR( p );
}
public static boolean IMPLIES ( boolean p, boolean q ) {
return !p || q;
}
public static boolean CONVERSE ( boolean p, boolean q ) {
return !q || p;
}
public static boolean IFF ( boolean p, boolean q ) {
return p == q;
}
public static boolean isOperator ( String token ) {
return isAND( token ) || isOR( token ) || isNOT( token ) ||
isXOR( token ) || isXNOR( token ) || isNAND( token ) ||
isNOR( token ) || isIMPLIES( token ) || isCONVERSE( token ) || isIFF( token );
}
public static boolean isAND ( String token ) {
for ( String op : AND )
if (op.equals( token ))
return true;
return false;
}
public static boolean isOR ( String token ) {
for ( String op : OR )
if (op.equals( token ))
return true;
return false;
}
public static boolean isNOT ( String token ) {
for ( String op : NOT )
if (op.equals( token ))
return true;
return false;
}
public static boolean isXOR ( String token ) {
for ( String op : XOR )
if (op.equals( token ))
return true;
return false;
}
public static boolean isXNOR ( String token ) {
for ( String op : XNOR )
if (op.equals( token ))
return true;
return false;
}
public static boolean isNAND ( String token ) {
for ( String op : NAND )
if (op.equals( token ))
return true;
return false;
}
public static boolean isNOR ( String token ) {
for ( String op : NOR )
if (op.equals( token ))
return true;
return false;
}
public static boolean isIMPLIES ( String token ) {
for ( String op : IMPLIES )
if (op.equals( token ))
return true;
return false;
}
public static boolean isIFF ( String token ) {
for ( String op : IFF )
if (op.equals( token ))
return true;
return false;
}
public static boolean isCONVERSE ( String token ) {
for ( String op : CONVERSE )
if (op.equals( token ))
return true;
return false;
}
public static int precedence ( String op ) {
if (isNOT( op ))
return 7;
else if (isAND( op ))
return 6;
else if (isNAND( op ))
return 5;
else if (isOR( op ))
return 4;
else if (isNOR( op ))
return 3;
else if (isXOR( op ) || isXNOR( op ))
return 2;
else if (isIMPLIES( op ) || isCONVERSE( op ))
return 1;
else if (isIFF( op ))
return 0;
else
return -99;
}
private static void printTable ( String[]... arrays ) {
System.out.println();// Print the contents of the arrays
for ( String[] array : arrays ) {
for ( String s : array )
System.out.printf( "%-15s", s );
System.out.println();
}
}
public static void print ( ) {
printTable( AND, OR, NOT, XOR, XNOR, NAND, NOR, IMPLIES, CONVERSE, IFF );
}
}