Bladeren bron

Added logical operators.

Conflicts:

	line.py
Taddeus Kroes 14 jaren geleden
bovenliggende
commit
70714ec033
2 gewijzigde bestanden met toevoegingen van 18 en 7 verwijderingen
  1. 11 7
      line.py
  2. 7 0
      tests/test_line.py

+ 11 - 7
line.py

@@ -1,12 +1,16 @@
 from traverse import traverse_depth_first
 
 
-OPERATORS = [
-        ('+', '-'),
-        ('*', '/', 'mod'),
-        ('^', '_')
-        ]
-
+OPERATORS = (
+    ('vv', ),
+    ('^^', ),
+    ('=', ),
+    ('+', '-'),
+    ('*', '/', 'mod'),
+    ('^', '_'),
+)
+
+NEG_PRED = 3
 MAX_PRED = len(OPERATORS)
 
 
@@ -110,7 +114,7 @@ def generate_line(root):
         # -3 * 4
         # --a
         if value.is_leaf \
-                or not ' ' in content[value] or pred(value) > 0:
+                or not ' ' in content[value] or pred(value) > NEG_PRED:
             return op + content[value]
 
         # -(a + b)

+ 7 - 0
tests/test_line.py

@@ -25,6 +25,13 @@ class TestLine(unittest.TestCase):
         times = N('*', plus, plus)
         self.assertEquals(generate_line(times), '(1 + 2)(1 + 2)')
 
+    def test_parentheses_no_equal_precedence(self):
+        a, b, c = L('a'), L('b'), L('c')
+        line = N('vv', a, N('^^', b, c))
+        self.assertEquals(generate_line(line), 'a vv b ^^ c')
+        line = N('^^', a, N('vv', b, c))
+        self.assertEquals(generate_line(line), 'a ^^ (b vv c)')
+
     def test_parentheses_equal_precedence_right(self):
         l0, l1, l2, l3 = L(1), L(2), L(3), L(4)
         plus = N('+', l1, l2)