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?"); } }
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(")"); }
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); }
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); }
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); }