-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOperator.cs
More file actions
36 lines (31 loc) · 1.25 KB
/
Copy pathOperator.cs
File metadata and controls
36 lines (31 loc) · 1.25 KB
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
using System;
namespace PolishForm
{
public abstract class Operator : IComparable<Operator>
{
public enum Associativity
{
Left, // all parentheses are closed to the left
Right // all parentheses are closed to the right
}
public readonly char symbol;
readonly int precedence;
public readonly Associativity associativity;
public Operator(char symbol, int precedence, Associativity associativity)
{
this.symbol = symbol;
this.precedence = precedence;
this.associativity = associativity;
}
// Compare operators based on their precedence
public int CompareTo(Operator? other)
{
ArgumentNullException.ThrowIfNull(other);
return precedence.CompareTo(other.precedence);
}
public static bool operator <=(Operator left, Operator right) => left.CompareTo(right) <= 0;
public static bool operator >=(Operator left, Operator right) => left.CompareTo(right) >= 0;
public static bool operator <(Operator left, Operator right) => left.CompareTo(right) < 0;
public static bool operator >(Operator left, Operator right) => left.CompareTo(right) > 0;
}
}