public AbstractType Visit(RelExpression x) { return(new PrimitiveType(DTokens.Bool)); }
public void Visit(RelExpression x) { }
public ISymbolValue Visit(RelExpression x) { return E_BoolOp(x); }
public void Visit(RelExpression x) { }
IExpression ParseAsmRelExpression(IBlockNode Scope, IStatement Parent) { var left = ParseAsmShiftExpression(Scope, Parent); while (true) { switch (laKind) { case LessThan: case LessEqual: case GreaterThan: case GreaterEqual: Step(); var e = new RelExpression(t.Kind); e.LeftOperand = left; e.RightOperand = ParseAsmShiftExpression(Scope, Parent); left = e; continue; default: return left; } } }
IExpression CmpExpression(IBlockNode Scope = null) { // TODO: Make this into a switch. var left = ShiftExpression(Scope); OperatorBasedExpression ae = null; // Equality Expressions if (laKind == Equal || laKind == NotEqual) ae = new EqualExpression(laKind == NotEqual); // Relational Expressions else if (IsRelationalOperator(laKind)) ae = new RelExpression(laKind); // Identity Expressions else if (laKind == Is || (laKind == Not && Peek(1).Kind == Is)) ae = new IdentityExpression(laKind == Not); // In Expressions else if (laKind == In || (laKind == Not && Peek(1).Kind == In)) ae = new InExpression(laKind == Not); else return left; // Skip possible !-Token if (laKind == Not) Step(); // Skip operator Step(); ae.LeftOperand = left; ae.RightOperand = ShiftExpression(Scope); return ae; }
IExpression CmpExpression(IBlockNode Scope = null) { var left = ShiftExpression(Scope); OperatorBasedExpression ae = null; // Equality Expressions if (laKind == Equal || laKind == NotEqual) ae = new EqualExpression(laKind == NotEqual); // Relational Expressions else if (RelationalOperators[laKind]) ae = new RelExpression(laKind); // Identity Expressions else if (laKind == Is || (laKind == Not && Peek(1).Kind == Is)) ae = new IdendityExpression(laKind == Not); // In Expressions else if (laKind == In || (laKind == Not && Peek(1).Kind == In)) ae = new InExpression(laKind == Not); else return left; LastParsedObject = ae; // Skip possible !-Token if (laKind == Not) Step(); // Skip operator Step(); ae.LeftOperand = left; ae.RightOperand = ShiftExpression(Scope); return ae; }
IExpression CmpExpression(IBlockNode Scope = null) { // TODO: Make this into a switch. var left = ShiftExpression(Scope); OperatorBasedExpression ae; switch (laKind) { case DTokens.Equal: case DTokens.NotEqual: ae = new EqualExpression (laKind == NotEqual); break; case DTokens.LessThan: case DTokens.LessEqual: case DTokens.GreaterThan: case DTokens.GreaterEqual: case DTokens.Unordered: case DTokens.LessOrGreater: case DTokens.LessEqualOrGreater: case DTokens.UnorderedOrGreater: case DTokens.UnorderedGreaterOrEqual: case DTokens.UnorderedOrLess: case DTokens.UnorderedLessOrEqual: case DTokens.UnorderedOrEqual: ae = new RelExpression (laKind); break; case DTokens.Is: ae = new IdentityExpression (false); break; case DTokens.In: ae = new InExpression (false); break; case Not: switch (Peek (1).Kind) { case DTokens.Is: ae = new IdentityExpression (false); Step (); break; case DTokens.In: ae = new InExpression (true); Step (); break; default: return left; } break; default: return left; } // Skip operator Step(); ae.LeftOperand = left; ae.RightOperand = ShiftExpression(Scope); return ae; }
public ISymbolValue Visit(RelExpression x) { return(E_BoolOp(x)); }