|
using System;
using System.Collections.Generic;
using System.Text;
namespace RpnParser {
public enum OperatorType {
Unknown,
BitwiseAnd = (int)'&',
BitwiseOr = (int)'|',
BitwiseXor = (int)'^',
LogicalAnd = 128+(int)'&',
LogicalOr = 128+(int)'|',
LogicalNot = 128 + (int)'^',
CompEqual = (int)'=',
CompNotEqual = (int)'!',
CompGreater = (int)'>',
CompGreaterEqual = 128 + (int)'>',
CompLessThan = (int)'<',
CompLessThanEqual = 128 + (int)'|',
Plus = (int)'+',
Minus = (int)'-',
Multiply = (int)'*',
Divide = (int)'/',
IntegerDivide = (int)'\\',
Modulus = (int)'%',
Exponent = 255,
CondTrue = (int)'?',
CondFalse = (int)':',
AssignEqual = 128+(int)'=',
AssignPlus = 128+(int)'+',
AssignMinus = 128+(int)'-',
AssignMultiply = 128+(int)'*',
AssignDivide = 128+(int)'/',
AssignIntegerDivide = 128+(int)'\\',
AssignModulus = 128+(int)'%'
}
public enum OperatorGroup {
Unknown,
Arithmetic,
Comparison,
Logical,
Bitwise,
Conditional,
Assignment
}
public enum Association {
NA,
Left,
Right
}
/// <summary>
/// Base class of all operators. Provides datastorage
/// </summary>
public class RpnOperator : RpnElement {
private OperatorType opType;
private OperatorGroup opGroup;
private Association assoc;
private int precedence;
private int condGoto;
public RpnOperator(RpnToken token)
: base(token) {
this.precedence = token.Precedence;
this.assoc = token.Association;
}
public bool IsMonadic {
get { return (this.precedence == 16); }
}
public OperatorType OpType {
get { return this.opType; }
set { this.opType = value; }
}
public OperatorGroup OpGroup {
get { return this.opGroup; }
set { this.opGroup = value; }
}
public int CondGoto {
get { return this.condGoto; }
set { this.condGoto = value; }
}
public Association Association {
get { return this.assoc; }
}
public override string ToString() {
string data = String.Format("{0} {1}", base.ElementType, base.StrValue);
if (this.opGroup == OperatorGroup.Conditional)
data += ' '+this.condGoto.ToString();
return data;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.