aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/python/ast
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-14 20:41:16 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-14 20:43:22 +0000
commit4ea4f22e89e38775fb0436d2c34bf5e0cf1ecfb4 (patch)
treeab73a9eccd008c231356e3f773d1a14deaf182ef /src/main/java/org/zwobble/couscous/backends/python/ast
parent2630c97f8b21c1b9d741eeafd8137c1d2b57c07d (diff)
Remove some unnecessary parens from Python output
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/python/ast')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonAttributeAccessNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonBinaryOperation.java61
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonBooleanLiteralNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonCallNode.java8
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonConditionalExpressionNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonExpressionNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonGetSliceNode.java8
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonIntegerLiteralNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonNotNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonStringLiteralNode.java5
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonVariableReferenceNode.java5
11 files changed, 103 insertions, 11 deletions
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<PythonExpressionNode> 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<PythonExpressionNode> 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