Quellcode durchsuchen

Negated n-ary operators are now enclosed in parentheses by line generator.

Taddeus Kroes vor 14 Jahren
Ursprung
Commit
cccf4d634f
2 geänderte Dateien mit 14 neuen und 1 gelöschten Zeilen
  1. 7 1
      line.py
  2. 7 0
      tests/test_line.py

+ 7 - 1
line.py

@@ -82,7 +82,13 @@ def generate_line(root):
         if is_operator(node):
             if arity == 1:
                 # Unary operator
-                result = op + traverse(node[0])
+                sub_exp = traverse(node[0])
+
+                if not isinstance(node[0], Leaf) and len(node[0]) > 1:
+                    # Negated n-ary operators should be enclosed in parentheses
+                    sub_exp = '(' + sub_exp + ')'
+
+                result = op + sub_exp
             else:
                 # N-ary operator
                 node_pred = pred(node)

+ 7 - 0
tests/test_line.py

@@ -153,3 +153,10 @@ class TestLine(unittest.TestCase):
         self.assertTrue(is_int(neg))
         self.assertFalse(is_int(neg_a))
         self.assertFalse(is_int(plus))
+
+    def test_negated_nary(self):
+        neg = N('-', N('+', L(1), L(2)))
+        self.assertEquals(generate_line(neg), '-(1 + 2)')
+
+        neg = N('-', N('-', L(1)))
+        self.assertEquals(generate_line(neg), '--1')