Browse Source

Modified parentheses when handling with negation due to precedence change.

Taddeus Kroes 14 năm trước cách đây
mục cha
commit
ade1a95046
2 tập tin đã thay đổi với 4 bổ sung4 xóa
  1. 1 1
      line.py
  2. 3 3
      tests/test_line.py

+ 1 - 1
line.py

@@ -146,7 +146,7 @@ def generate_line(root):
                 # (-a) * b
                 # a * -b
                 # (-a) / b
-                if (node_pred > NEG_PRED and not i):
+                if node_pred > NEG_PRED:
                     exp = '(' + exp + ')'
             elif child_pred < node_pred:
                 exp = '(' + exp + ')'

+ 3 - 3
tests/test_line.py

@@ -77,7 +77,7 @@ class TestLine(unittest.TestCase):
     def test_multiplication_identifiers(self):
         a, b = L('a'), L('b')
         self.assertEquals(generate_line(N('*', a, b)), 'ab')
-        self.assertEquals(generate_line(N('*', a, -b)), 'a * -b')
+        self.assertEquals(generate_line(N('*', a, -b)), 'a(-b)')
 
     def test_multiplication_constant_identifier(self):
         l0, a = L(2), L('a')
@@ -219,7 +219,7 @@ class TestLine(unittest.TestCase):
         self.assertEquals(generate_line(neg), '-4a')
 
         neg = N('*', L(4), -L('a'))
-        self.assertEquals(generate_line(neg), '4 * -a')
+        self.assertEquals(generate_line(neg), '4(-a)')
 
         neg = -N('*', L(4), L(5))
         self.assertEquals(generate_line(neg), '-4 * 5')
@@ -234,7 +234,7 @@ class TestLine(unittest.TestCase):
         self.assertEquals(generate_line(plus), 'a / b - c / d')
 
         mul = N('*', N('+', L('a'), L('b')), -N('+', L('c'), L('d')))
-        self.assertEquals(generate_line(mul), '(a + b) * -(c + d)')
+        self.assertEquals(generate_line(mul), '(a + b)(-(c + d))')
 
     def test_double_negation(self):
         neg = --L(1)