Esempio n. 1
0
        protected void TranslateBinaryOpChain(List <string> output, BinaryOpChain binaryOp)
        {
            // TODO: something about the parenthesis epidemic
            switch (binaryOp.Op.Value)
            {
            case "+":
            case "-":
            case "*":
            case "%":
            case "<<":
            case ">>":
            case "<":
            case ">":
            case "==":
            case "!=":
            case "<=":
            case ">=":
            case "&":
            case "|":
            case "^":
                this.TranslateDefaultBinaryOp(output, binaryOp);
                break;

            case "**":
                throw new ParserException(binaryOp.Op, "Use a framework function instead to indicate whether you want a float or int output.");

            case "/":
                throw new ParserException(binaryOp.Op, "Due to varying behavior of / on different languages, please use a framework function instead.");

            default:
                throw new ParserException(binaryOp.Op, "How did this happen?");
            }
        }
Esempio n. 2
0
 private void TranslateDefaultBinaryOp(List <string> output, BinaryOpChain binOp)
 {
     output.Add("(");
     this.TranslateExpression(output, binOp.Left);
     output.Add(" ");
     this.TranslateBinaryOpSyntax(output, binOp.Op.Value);
     output.Add(" ");
     this.TranslateExpression(output, binOp.Right);
     output.Add(")");
 }
Esempio n. 3
0
        private static Expression ParseExponents(TokenStream tokens, Executable owner)
        {
            Expression expr = ParseIncrement(tokens, owner);
            string     next = tokens.PeekValue();

            if (next == "**")
            {
                Token      op    = tokens.Pop();
                Expression right = ParseNegate(tokens, owner);
                expr = new BinaryOpChain(expr, op, right, owner);
            }
            return(expr);
        }
Esempio n. 4
0
        private static Expression ParseMultiplication(TokenStream tokens, Executable owner)
        {
            Expression expr = ParseNegate(tokens, owner);
            string     next = tokens.PeekValue();

            while (MULTIPLICATION_OPS.Contains(next))
            {
                Token      op    = tokens.Pop();
                Expression right = ParseNegate(tokens, owner);
                expr = new BinaryOpChain(expr, op, right, owner);
                next = tokens.PeekValue();
            }
            return(expr);
        }
Esempio n. 5
0
        private Expression ParseAddition(TokenStream tokens, TopLevelConstruct owner)
        {
            Expression expr = ParseMultiplication(tokens, owner);
            string     next = tokens.PeekValue();

            while (ADDITION_OPS.Contains(next))
            {
                Token      op    = tokens.Pop();
                Expression right = ParseMultiplication(tokens, owner);
                expr = new BinaryOpChain(expr, op, right, owner);
                next = tokens.PeekValue();
            }
            return(expr);
        }