private object MapRel(string left, string oper, string right) { //TODO: Check the expression on the right if (!OperChecker.IsRelOper(oper) || !Check.IsProp(left)) { throw new Exception("Invalid relational operation"); } var leftNode = PropChecker.GetNode(left); var rightNode = Check.GetNode(right); return(OperChecker.GetRelationalNode(leftNode, oper, rightNode)); }
public static Expression GetNode(string token) { object constant = IsBool(token) ? Cast <bool>(token, bool.TryParse) : IsInt(token) ? Cast <int>(token, int.TryParse) : IsFloat(token) ? Cast <float>(token, float.TryParse) : IsChar(token) ? Cast <char>(token, char.TryParse) : IsDate(token) ? Cast <DateTime>(token, DateTime.TryParse) : IsProp(token) ? PropChecker.GetProp(token) : GetString(token); if (constant == null) { throw new Exception($"Invalid constant value {token}"); } return(ConstantExpression.Constant(constant)); }
public static bool IsProp(string value) => PropChecker.IsProp(value);