Beispiel #1
0
        public override object VisitUnaryExprNode(UnaryExprNode n)
        {
            Visit(n.expr);
            switch (n.op)
            {
            case "-":
            {
                n.Type = n.expr.Type.Equals(TypeSymbol.FLOAT_SYMBOL) ? TypeSymbol.FLOAT_SYMBOL : TypeSymbol.INT_SYMBOL;
            }
            break;

            case "!":
            {
                n.Type = TypeSymbol.BOOL_SYMBOL;
            }
            break;

            case "~":
            {
                n.Type = TypeSymbol.INT_SYMBOL;
            }
            break;
            }
            return(null);
        }
Beispiel #2
0
            public override object VisitUnaryExprNode(UnaryExprNode n)
            {
                switch (n.op)
                {
                case "-":
                {
                    semanticChecker.CheckAndReport(n.expr.Type.Match(TypeSymbol.INT_SYMBOL) || n.expr.Type.Match(TypeSymbol.FLOAT_SYMBOL), n.sourceLoc, "Type mismatch");
                    semanticChecker.CheckAndReport(n.Type.Match(TypeSymbol.INT_SYMBOL) || n.Type.Match(TypeSymbol.FLOAT_SYMBOL), n.sourceLoc, "Type mismatch");
                    semanticChecker.CheckAndReport(n.Type.Match(n.expr.Type), n.sourceLoc, "Type mismatch");
                }
                break;

                case "~":
                {
                    semanticChecker.CheckAndReport(n.expr.Type.Match(TypeSymbol.INT_SYMBOL), n.sourceLoc, "Type mismatch");
                    semanticChecker.CheckAndReport(n.Type.Match(TypeSymbol.INT_SYMBOL), n.sourceLoc, "Type mismatch");
                }
                break;

                case "!":
                {
                    semanticChecker.CheckAndReport(n.expr.Type.Match(TypeSymbol.BOOL_SYMBOL), n.sourceLoc, "Type mismatch");
                    semanticChecker.CheckAndReport(n.Type.Match(TypeSymbol.BOOL_SYMBOL), n.sourceLoc, "Type mismatch");
                }
                break;
                }
                return(null);
            }
Beispiel #3
0
            public override LData VisitUnaryExprNode(UnaryExprNode n)
            {
                LData val = LDataMaker.GetDataFor(n.Type);

                switch (n.op)
                {
                case "-":
                {
                    val.SetValue(-Visit(n.expr).GetValue());
                }
                break;

                case "!":
                {
                    val.SetValue(!Visit(n.expr).GetValue());
                }
                break;

                case "~":
                {
                    val.SetValue(~Visit(n.expr).GetValue());
                }
                break;
                }
                return(val);
            }
Beispiel #4
0
        public object VisitUnaryExprNode(UnaryExprNode n)
        {
            WriteLine(n.kind + " - " + n.op + ":" + n.Type);
            Indent();
            Visit(n.expr);
            Dedent();

            return(null);
        }
Beispiel #5
0
        public override MIPSRegister VisitUnaryExprNode(UnaryExprNode n)
        {
            var reg = Gen(n.expr);

            switch (n.op)
            {
            case "-":
            {
                emit.Emit("sub", reg, rm.ZERO, reg);
            }
            break;

            case "~":
            case "!":
            {
                emit.Emit("nor", reg, reg, reg);
            }
            break;
            }

            return(reg);
        }
Beispiel #6
0
 public override LLVMRegister VisitUnaryExprNode(UnaryExprNode n)
 {
     throw new NotImplementedException();
 }
Beispiel #7
0
        public virtual T VisitUnaryExprNode(UnaryExprNode n)
        {
            T a = n.expr.Accept(this);

            return(default(T));
        }