protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); string op; switch (Operator) { case Operator.Equal: op = "="; break; case Operator.NotEqual: op = "<>"; break; case Operator.Greater: op = ">"; break; case Operator.GreaterOrEqual: op = ">="; break; case Operator.NotGreater: op = "!>"; break; case Operator.Less: op = "<"; break; case Operator.LessOrEqual: op = "<="; break; case Operator.NotLess: op = "!<"; break; default: throw new InvalidOperationException(); } sb.Append(" ").Append(op).Append(" "); Expr2.ToString(sb, dic); }
protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); if (IsNot) { sb.Append(" NOT"); } switch (Kind) { case SearchKind.StartsWith: sb.Append(" STARTS_WITH "); break; case SearchKind.EndsWith: sb.Append(" ENS_WITH "); break; case SearchKind.Contains: sb.Append(" CONTAINS "); break; default: throw new ArgumentOutOfRangeException(); } Expr2.ToString(sb, dic); }
ISqlExpression ISqlExpressionWalkable.Walk(bool skipColumns, Func <ISqlExpression, ISqlExpression> func) { Expr1 = Expr1.Walk(skipColumns, func); Expr2 = Expr2.Walk(skipColumns, func); return(func(this)); }
protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); if (IsNot) { sb.Append(" NOT"); } switch (Kind) { case SearchKind.StartsWith: sb.Append(" STARTS_WITH "); break; case SearchKind.EndsWith: sb.Append(" ENDS_WITH "); break; case SearchKind.Contains: sb.Append(" CONTAINS "); break; default: throw new InvalidOperationException($"Unexpected search kind: {Kind}"); } Expr2.ToString(sb, dic); }
ISqlExpression ISqlExpressionWalkable.Walk(WalkOptions options, Func <ISqlExpression, ISqlExpression> func) { Expr1 = Expr1.Walk(options, func) !; Expr2 = Expr2.Walk(options, func) !; return(func(this)); }
public override void Jumping(int t, int f) { var a = Expr1.Reduce(); var b = Expr2.Reduce(); var test = a + " " + Op + " " + b; EmitJumps(test, t, f); }
public Expr1(KaitaiStream p__io, KaitaiStruct p__parent = null, Expr1 p__root = null) : base(p__io) { m_parent = p__parent; m_root = p__root ?? this; f_lenOf1Mod = false; f_str1Len = false; _read(); }
protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); sb .Append(" IS ") .Append(IsNot ? "NOT " : "") .Append("NULL"); }
public IFormType BuildForm(ITypeEnvironment env) { IFormType a = Expr1.BuildForm(env); IFormType b = Expr2.BuildForm(env); IFormType type = a.GetLeastUpperBound(b); return(type); }
protected override void ToStringInternal(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); sb.Append(" " + GetOperator() + " "); Expr2.ToString(sb, dic); }
public IEnumerable <Inline> BuildDocument() { List <Inline> inlines = new List <Inline>(); inlines.AddRange(Expr1.BuildDocument()); inlines.Add(new Run(" % ")); inlines.AddRange(Expr2.BuildDocument()); return(inlines); }
public override bool Equals(object obj) { if (!(obj is UnaryExpr)) { return(false); } return(Expr1.Equals(((UnaryExpr)obj).Expr1)); }
static void Main(string[] args) { var path = "./input1.txt"; Scan.Init(path); var tree = Expr1.GetAstTree(); Expr.GenCode(tree); }
StringBuilder IQueryElement.ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1 .ToString(sb, dic) .Append(' ') .Append(Operation) .Append(' '); return(Expr2.ToString(sb, dic)); }
public override int GetHashCode() { var hashCode = Operation.GetHashCode(); hashCode = unchecked (hashCode + (hashCode * 397) ^ SystemType.GetHashCode()); hashCode = unchecked (hashCode + (hashCode * 397) ^ Expr1.GetHashCode()); hashCode = unchecked (hashCode + (hashCode * 397) ^ Expr2.GetHashCode()); return(hashCode); }
public override void Jumping(int t, int f) { var label = t != 0 ? t : NewLabel(); Expr1.Jumping(label, 0); Expr2.Jumping(t, f); if (t == 0) { EmitLabel(label); } }
public override bool Equals(object obj) { if (!(obj is BinaryExpr)) { return(false); } BinaryExpr other = (BinaryExpr)obj; return(Expr1.Equals(other.Expr1) && Expr2.Equals(other.Expr2)); }
public ValueContainer Evaluate(IValueEnvironment env) { ValueContainer a = Expr1.Evaluate(env); ValueContainer value = new ValueContainer(!Convert.ToBoolean(a.Value)); Action onValueChanged = () => value.Value = !Convert.ToBoolean(a.Value); a.ValueChanged += onValueChanged; return(value); }
protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); if (IsNot) { sb.Append(" NOT"); } sb.Append(" IN ("); ((IQueryElement)SubQuery).ToString(sb, dic); sb.Append(")"); }
public ValueContainer Evaluate(IValueEnvironment env) { ValueContainer a = Expr2.Evaluate(env); ValueContainer b = Expr3.Evaluate(env); ValueContainer value = new ValueContainer(Convert.ToBoolean(Expr1.Evaluate(env).Value) ? a.Value : b.Value); Action onValueChanged = () => value.Value = Convert.ToBoolean(Expr1.Evaluate(env).Value) ? a.Value : b.Value; a.ValueChanged += onValueChanged; b.ValueChanged += onValueChanged; return(value); }
public ValueContainer Evaluate(IValueEnvironment env) { ValueContainer a = Expr1.Evaluate(env); ValueContainer b = Expr2.Evaluate(env); ValueContainer value = new ValueContainer(Evaluate(a, b)); Action onValueChanged = () => value.Value = Evaluate(a, b); a.ValueChanged += onValueChanged; b.ValueChanged += onValueChanged; return(value); }
public override Expr Simplify() { if (Expr1.Equals(new CstI(0)) && Expr2.Equals(new CstI(0))) { return(new CstI(0)); } if (Expr1.Equals(Expr2)) { return(new CstI(0)); } return(Expr2.Equals(new CstI(0)) ? Expr1 : this); }
public override ITypeCheckType TypeCheck(ITypeEnvironment env) { ITypeCheckType a = Expr1.TypeCheck(env); ITypeCheckType b = Expr2.TypeCheck(env); if (!a.CompatibleWith(ExpressionUpperBound) || !a.CompatibleWith(b)) { env.ReportError(String.Format("Comparison using '<=' not possible. Incompatible types: '{0}', '{1}'. Only numeric types are supported.", a, b), SourceStartPosition, SourceEndPosition); } return(new BoolType()); }
protected override void ToString(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); if (IsNot) { sb.Append(" NOT"); } sb.Append(" BETWEEN "); Expr2.ToString(sb, dic); sb.Append(" AND "); Expr3.ToString(sb, dic); }
protected override void ToStringInternal(StringBuilder sb, Dictionary <IQueryElement, IQueryElement> dic) { Expr1.ToString(sb, dic); sb.Append(GetOperator()); Expr2.ToString(sb, dic); if (Escape != null) { sb.Append(" ESCAPE "); Escape.ToString(sb, dic); } }
public ITypeCheckType TypeCheck(ITypeEnvironment env) { ITypeCheckType a = Expr1.TypeCheck(env); if (!a.CompatibleWith(NegationUpperBound)) { env.ReportError(String.Format("Negation not possible. Incompatible type: '{0}'. Only numerical types are supported.", a), SourceStartPosition, SourceEndPosition); return(NegationUpperBound); } return(a); }
protected override ICloneableElement Clone(Dictionary <ICloneableElement, ICloneableElement> objectTree, Predicate <ICloneableElement> doClone) { if (!doClone(this)) { return(this); } if (!objectTree.TryGetValue(this, out var clone)) { objectTree.Add(this, clone = new IsTrue((ISqlExpression)Expr1.Clone(objectTree, doClone), TrueValue, FalseValue, WithNull, IsNot)); } return(clone); }
protected override ICloneableElement Clone(Dictionary <ICloneableElement, ICloneableElement> objectTree, Predicate <ICloneableElement> doClone) { if (!doClone(this)) { return(this); } if (!objectTree.TryGetValue(this, out var clone)) { objectTree.Add(this, clone = new NotExpr((ISqlExpression)Expr1.Clone(objectTree, doClone), IsNot, Precedence)); } return(clone); }
public bool Equals(ISqlExpression?other, Func <ISqlExpression, ISqlExpression, bool> comparer) { if (this == other) { return(true); } return (other is SqlBinaryExpression expr && Operation == expr.Operation && SystemType == expr.SystemType && Expr1.Equals(expr.Expr1, comparer) && Expr2.Equals(expr.Expr2, comparer) && comparer(this, other)); }
protected override ICloneableElement Clone(Dictionary <ICloneableElement, ICloneableElement> objectTree, Predicate <ICloneableElement> doClone) { if (!doClone(this)) { return(this); } if (!objectTree.TryGetValue(this, out var clone)) { objectTree.Add(this, clone = new SearchString( (ISqlExpression)Expr1.Clone(objectTree, doClone), IsNot, (ISqlExpression)Expr2.Clone(objectTree, doClone), Kind, IgnoreCase)); } return(clone); }