From: Oleg Broytman Date: Fri, 6 Jun 2014 15:47:56 +0000 (+0400) Subject: Ignore spaces X-Git-Tag: v0.2~4 X-Git-Url: https://git.phdru.name/?p=phdru.name%2Fcgi-bin%2Fblog-ru%2Fsearch-tags.git;a=commitdiff_plain;h=47606d9636fd6076cee67d444207aa66d30abfbe Ignore spaces --- diff --git a/parser/grammar b/parser/grammar index 7ded1c2..ade8b12 100644 --- a/parser/grammar +++ b/parser/grammar @@ -20,8 +20,13 @@ OR_OP : '|' NOT_OP : '!' +SP0 : '[ \t]*' + +SP1 : '[ \t]+' + expression : NAME | expression AND_OP expression - | NOT_OP expression | expression OR_OP expression + | NOT_OP expression | '(' expression ')' + | SP0 expression SP0 diff --git a/parser/parser.py b/parser/parser.py index 7caa2e2..2fcf716 100644 --- a/parser/parser.py +++ b/parser/parser.py @@ -14,6 +14,8 @@ t_OR_OP = r'\|' t_NOT_OP = '!' +t_ignore = '[ \t]+' + def t_error(t): """Avoid warnings on stderr""" diff --git a/parser/test_parser.py b/parser/test_parser.py index 3e54f5c..804505f 100755 --- a/parser/test_parser.py +++ b/parser/test_parser.py @@ -18,14 +18,15 @@ class TestParser(unittest.TestCase): 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')) ) + def test_05_bad_expression(self): + self.assertIs(parser.parse('!(xxx&yyy'), None) + if __name__ == "__main__": unittest.main()