示例#1
0
        static Expression CompileBinaryExpression(Ast.BinaryExpression expr, Expression Context)
        {
            var left  = CompileSingleExpression(expr.Left, Context);
            var right = CompileSingleExpression(expr.Right, Context);

            switch (expr.Operation)
            {
            case BinaryOp.Addition:
                return(Expression.Add(left, right));

            case BinaryOp.And:
                return(Expression.And(left, right));

            case BinaryOp.Concat:
                return(Expression.Call(LuaEvents_concat, left, right));

            case BinaryOp.Different:
                return(Expression.Not(Expression.Call(LuaEvents_eq, left, right)));

            case BinaryOp.Division:
                return(Expression.Divide(left, right));

            case BinaryOp.Equal:
                return(Expression.Call(LuaEvents_eq, left, right));

            case BinaryOp.GreaterOrEqual:
                return(Expression.GreaterThanOrEqual(left, right));

            case BinaryOp.GreaterThan:
                return(Expression.GreaterThan(left, right));

            case BinaryOp.LessOrEqual:
                return(Expression.LessThanOrEqual(left, right));

            case BinaryOp.LessThan:
                return(Expression.LessThan(left, right));

            case BinaryOp.Modulo:
                return(Expression.Modulo(left, right));

            case BinaryOp.Multiplication:
                return(Expression.Multiply(left, right));

            case BinaryOp.Or:
                return(Expression.Or(left, right));

            case BinaryOp.Power:
                return(Expression.ExclusiveOr(left, right));

            case BinaryOp.Subtraction:
                return(Expression.Subtract(left, right));

            default:
                throw new NotImplementedException();
            }
        }
示例#2
0
        public string iterateBinOp(BinaryExpression bb, string name, List<string> Lines)
        {
            var line = "";
            string a = "";
            string b = "";

            if (bb.Left is BinaryExpression)
            {
                a = name + "_opt_" + optc;
                optc++;
                //Lines.Add("/scoreboard objectives remove " + a);
                Lines.Add("/scoreboard objectives add " + a + " dummy");
                var ln =  iterateBinOp(bb.Left as BinaryExpression, a , Lines);
                Lines.Add("/scoreboard players operation lua " + a + " " + "+=" + " lua " + ln);
            }
            else
            {
                if(char.IsDigit(TypeToString(bb.Left)[0]))
                {
                    //and new var
                    //Lines.Add("/scoreboard objectives remove con_" + ConstantCount);
                    Lines.Add("/scoreboard objectives add con_" + ConstantCount + " dummy");
                    Lines.Add("/scoreboard players set lua con_" + ConstantCount + " " + TypeToString(bb.Left));
                    a = "con_" + ConstantCount;
                    ConstantCount++;
                }
                else
                {
                    a = TypeToString(bb.Left);
                }
            }

            if (bb.Right is BinaryExpression)
            {
                b = name + "_opt_" + optc;
                optc++;
               // Lines.Add("/scoreboard objectives remove " + b);
                Lines.Add("/scoreboard objectives add " + b + " dummy");
                var ln = iterateBinOp(bb.Right as BinaryExpression, b, Lines);
                Lines.Add("/scoreboard players operation lua " + b + " " + "+=" + " lua " + ln);
            }
            else
            {
                if (char.IsDigit(TypeToString(bb.Right)[0]))
                {
                    //and new var
                   // Lines.Add("/scoreboard objectives remove con_" + ConstantCount);
                    Lines.Add("/scoreboard objectives add con_" + ConstantCount + " dummy");
                    Lines.Add("/scoreboard players set lua con_" + ConstantCount + " " + TypeToString(bb.Right));
                    b = "con_" + ConstantCount;
                    ConstantCount++;
                }
                else
                {
                    b = TypeToString(bb.Right);
                }
            }

            Lines.Add("/scoreboard players operation lua " + a + " " + BuildBOp(bb.Operation) + " lua " + b );
            line = a;
            return line;
        }