Esempio n. 1
0
 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)
		{
			
		}
Esempio n. 5
0
 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;
         }
     }
 }
Esempio n. 6
0
        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;
        }
Esempio n. 7
0
        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;
        }
Esempio n. 8
0
		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));
 }