From 4ea4f22e89e38775fb0436d2c34bf5e0cf1ecfb4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 14 Jan 2016 20:41:16 +0000 Subject: Remove some unnecessary parens from Python output --- .../python/ast/PythonAttributeAccessNode.java | 5 ++ .../backends/python/ast/PythonBinaryOperation.java | 61 +++++++++++++++++++--- .../python/ast/PythonBooleanLiteralNode.java | 5 ++ .../backends/python/ast/PythonCallNode.java | 8 ++- .../ast/PythonConditionalExpressionNode.java | 5 ++ .../backends/python/ast/PythonExpressionNode.java | 2 +- .../backends/python/ast/PythonGetSliceNode.java | 8 ++- .../python/ast/PythonIntegerLiteralNode.java | 5 ++ .../backends/python/ast/PythonNotNode.java | 5 ++ .../python/ast/PythonStringLiteralNode.java | 5 ++ .../python/ast/PythonVariableReferenceNode.java | 5 ++ 11 files changed, 103 insertions(+), 11 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/backends/python/ast') diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonAttributeAccessNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonAttributeAccessNode.java index 95e6cf0..e2b8d8b 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonAttributeAccessNode.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonAttributeAccessNode.java @@ -32,4 +32,9 @@ public final class PythonAttributeAccessNode implements PythonExpressionNode { public java.lang.String toString() { return "PythonAttributeAccessNode(left=" + this.getLeft() + ", attributeName=" + this.getAttributeName() + ")"; } + + @Override + public int precedence() { + return 160; + } } \ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBinaryOperation.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBinaryOperation.java index 8d6b9ce..ecaf038 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBinaryOperation.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBinaryOperation.java @@ -4,26 +4,66 @@ import org.zwobble.couscous.backends.python.ast.visitors.PythonNodeVisitor; public class PythonBinaryOperation implements PythonExpressionNode { public static PythonExpressionNode pythonIs(PythonExpressionNode left, PythonExpressionNode right) { - return new PythonBinaryOperation("is", left, right); + return new PythonBinaryOperation("is", 50, left, right); + } + + public static PythonExpressionNode pythonAnd(PythonExpressionNode left, PythonExpressionNode right) { + return new PythonBinaryOperation("and", 20, left, right); + } + + public static PythonExpressionNode pythonOr(PythonExpressionNode left, PythonExpressionNode right) { + return new PythonBinaryOperation("or", 20, left, right); } public static PythonExpressionNode pythonAdd(PythonExpressionNode left, PythonExpressionNode right) { - return new PythonBinaryOperation("+", left, right); + return new PythonBinaryOperation("+", 100, left, right); + } + + public static PythonExpressionNode pythonSubtract(PythonExpressionNode left, PythonExpressionNode right) { + return new PythonBinaryOperation("-", 100, left, right); } - public static PythonExpressionNode pythonEq(PythonExpressionNode left, PythonExpressionNode right) { - return new PythonBinaryOperation("==", left, right); + public static PythonExpressionNode pythonMultiply(PythonExpressionNode left, PythonExpressionNode right) { + return new PythonBinaryOperation("*", 110, left, right); + } + + public static PythonExpressionNode pythonEqual(PythonExpressionNode left, PythonExpressionNode right) { + return new PythonBinaryOperation("==", 50, left, right); + } + + public static PythonExpressionNode pythonNotEqual(PythonExpressionNode left, PythonExpressionNode right) { + return new PythonBinaryOperation("!=", 50, left, right); + } + + public static PythonExpressionNode pythonLessThan(PythonExpressionNode left, PythonExpressionNode right) { + return new PythonBinaryOperation("<", 50, left, right); + } + + public static PythonExpressionNode pythonLessThanOrEqual(PythonExpressionNode left, PythonExpressionNode right) { + return new PythonBinaryOperation("<=", 50, left, right); + } + + public static PythonExpressionNode pythonGreaterThan(PythonExpressionNode left, PythonExpressionNode right) { + return new PythonBinaryOperation(">", 50, left, right); + } + + public static PythonExpressionNode pythonGreatThanOrEqual(PythonExpressionNode left, PythonExpressionNode right) { + return new PythonBinaryOperation(">=", 50, left, right); } private final String operator; + private final int precedence; private final PythonExpressionNode left; private final PythonExpressionNode right; - public PythonBinaryOperation( - String operator, - PythonExpressionNode left, - PythonExpressionNode right) { + private PythonBinaryOperation( + String operator, + int precedence, + PythonExpressionNode left, + PythonExpressionNode right) + { this.operator = operator; + this.precedence = precedence; this.left = left; this.right = right; } @@ -44,4 +84,9 @@ public class PythonBinaryOperation implements PythonExpressionNode { public void accept(PythonNodeVisitor visitor) { visitor.visit(this); } + + @Override + public int precedence() { + return precedence; + } } diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBooleanLiteralNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBooleanLiteralNode.java index 893f2e1..fd902ee 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBooleanLiteralNode.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBooleanLiteralNode.java @@ -26,4 +26,9 @@ public final class PythonBooleanLiteralNode implements PythonExpressionNode { public java.lang.String toString() { return "PythonBooleanLiteralNode(value=" + this.getValue() + ")"; } + + @Override + public int precedence() { + return Integer.MAX_VALUE; + } } \ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonCallNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonCallNode.java index ae3761b..3adb4fb 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonCallNode.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonCallNode.java @@ -1,8 +1,9 @@ package org.zwobble.couscous.backends.python.ast; -import java.util.List; import org.zwobble.couscous.backends.python.ast.visitors.PythonNodeVisitor; +import java.util.List; + public final class PythonCallNode implements PythonExpressionNode { private final PythonExpressionNode callee; private final List arguments; @@ -33,4 +34,9 @@ public final class PythonCallNode implements PythonExpressionNode { public java.lang.String toString() { return "PythonCallNode(callee=" + this.getCallee() + ", arguments=" + this.getArguments() + ")"; } + + @Override + public int precedence() { + return 150; + } } \ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonConditionalExpressionNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonConditionalExpressionNode.java index a320cd2..75f9e15 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonConditionalExpressionNode.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonConditionalExpressionNode.java @@ -38,4 +38,9 @@ public final class PythonConditionalExpressionNode implements PythonExpressionNo public java.lang.String toString() { return "PythonConditionalExpressionNode(condition=" + this.getCondition() + ", trueValue=" + this.getTrueValue() + ", falseValue=" + this.getFalseValue() + ")"; } + + @Override + public int precedence() { + return 10; + } } \ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonExpressionNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonExpressionNode.java index 9c8a259..8105271 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonExpressionNode.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonExpressionNode.java @@ -1,5 +1,5 @@ package org.zwobble.couscous.backends.python.ast; public interface PythonExpressionNode extends PythonNode { - + int precedence(); } diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonGetSliceNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonGetSliceNode.java index 70343d8..1a245cd 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonGetSliceNode.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonGetSliceNode.java @@ -1,8 +1,9 @@ package org.zwobble.couscous.backends.python.ast; -import java.util.List; import org.zwobble.couscous.backends.python.ast.visitors.PythonNodeVisitor; +import java.util.List; + public final class PythonGetSliceNode implements PythonExpressionNode { private final PythonExpressionNode receiver; private final List arguments; @@ -33,4 +34,9 @@ public final class PythonGetSliceNode implements PythonExpressionNode { public java.lang.String toString() { return "PythonGetSliceNode(receiver=" + this.getReceiver() + ", arguments=" + this.getArguments() + ")"; } + + @Override + public int precedence() { + return 150; + } } \ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonIntegerLiteralNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonIntegerLiteralNode.java index ce09767..18156ad 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonIntegerLiteralNode.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonIntegerLiteralNode.java @@ -26,4 +26,9 @@ public final class PythonIntegerLiteralNode implements PythonExpressionNode { public java.lang.String toString() { return "PythonIntegerLiteralNode(value=" + this.getValue() + ")"; } + + @Override + public int precedence() { + return Integer.MAX_VALUE; + } } \ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonNotNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonNotNode.java index 6fe7dc6..e24d0d8 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonNotNode.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonNotNode.java @@ -21,4 +21,9 @@ public class PythonNotNode implements PythonExpressionNode { public void accept(PythonNodeVisitor visitor) { visitor.visit(this); } + + @Override + public int precedence() { + return 40; + } } diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonStringLiteralNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonStringLiteralNode.java index d64be5f..f3ee201 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonStringLiteralNode.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonStringLiteralNode.java @@ -26,4 +26,9 @@ public final class PythonStringLiteralNode implements PythonExpressionNode { public java.lang.String toString() { return "PythonStringLiteralNode(value=" + this.getValue() + ")"; } + + @Override + public int precedence() { + return Integer.MAX_VALUE; + } } \ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonVariableReferenceNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonVariableReferenceNode.java index 876ac14..f8c2b4a 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonVariableReferenceNode.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonVariableReferenceNode.java @@ -26,4 +26,9 @@ public final class PythonVariableReferenceNode implements PythonExpressionNode { public java.lang.String toString() { return "PythonVariableReferenceNode(name=" + this.getName() + ")"; } + + @Override + public int precedence() { + return Integer.MAX_VALUE; + } } \ No newline at end of file -- cgit v1.2.3