]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/commitdiff
Ignore spaces
authorOleg Broytman <phd@phdru.name>
Fri, 6 Jun 2014 15:47:56 +0000 (19:47 +0400)
committerOleg Broytman <phd@phdru.name>
Fri, 6 Jun 2014 15:47:56 +0000 (19:47 +0400)
parser/grammar
parser/parser.py
parser/test_parser.py

index 7ded1c25988c04c2b998a76ae45f04e789eb2ac1..ade8b129eceb5b65576ee8edca20a6308fe2a09f 100644 (file)
@@ -20,8 +20,13 @@ OR_OP : '|'
 
 NOT_OP : '!'
 
 
 NOT_OP : '!'
 
+SP0 : '[ \t]*'
+
+SP1 : '[ \t]+'
+
 expression : NAME
            | expression AND_OP expression
 expression : NAME
            | expression AND_OP expression
-           | NOT_OP expression
            | expression OR_OP expression
            | expression OR_OP expression
+           | NOT_OP expression
            | '(' expression ')'
            | '(' expression ')'
+           | SP0 expression SP0
index 7caa2e2fc6969b0e5b651c01ee2ebc809262c75c..2fcf716a8a37492e4b3965f20f4466c0b03dab91 100644 (file)
@@ -14,6 +14,8 @@ t_OR_OP = r'\|'
 
 t_NOT_OP = '!'
 
 
 t_NOT_OP = '!'
 
+t_ignore = '[ \t]+'
+
 def t_error(t):
     """Avoid warnings on stderr"""
 
 def t_error(t):
     """Avoid warnings on stderr"""
 
index 3e54f5c16a76965cc854aa0be6642f767975da2b..804505fac06b0c2214c50d86e1c26d65f52ba289 100755 (executable)
@@ -18,14 +18,15 @@ class TestParser(unittest.TestCase):
         self.assertEqual(parser.parse('!(xxx&yyy)'),
             ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
         )
         self.assertEqual(parser.parse('!(xxx&yyy)'),
             ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
         )
-
-    def test_05_bad_expression(self):
-        self.assertIs(parser.parse('!(xxx&yyy'), None)
-
-    def test_06_expression2(self):
+        self.assertEqual(parser.parse('!(xxx & yyy)'),
+            ('NOT', ('PARENS', ('AND', ('NAME', 'xxx'), ('NAME', 'yyy'))))
+        )
         self.assertEqual(parser.parse('!xxx&yyy&zzz|ooo'),
             ('OR', ('AND', ('AND', ('NOT', ('NAME', 'xxx')), ('NAME', 'yyy')), ('NAME', 'zzz')), ('NAME', 'ooo'))
         )
 
         self.assertEqual(parser.parse('!xxx&yyy&zzz|ooo'),
             ('OR', ('AND', ('AND', ('NOT', ('NAME', 'xxx')), ('NAME', 'yyy')), ('NAME', 'zzz')), ('NAME', 'ooo'))
         )
 
+    def test_05_bad_expression(self):
+        self.assertIs(parser.parse('!(xxx&yyy'), None)
+
 if __name__ == "__main__":
     unittest.main()
 if __name__ == "__main__":
     unittest.main()