]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/commitdiff
Reorder handling: AND - OR - NOT
authorOleg Broytman <phd@phdru.name>
Sun, 22 Jun 2014 00:03:52 +0000 (04:03 +0400)
committerOleg Broytman <phd@phdru.name>
Sun, 22 Jun 2014 00:03:52 +0000 (04:03 +0400)
parser/grammar
parser/parser.py

index 694437875fcc62548065bef2d439eeb3a9f41f46..b88b9eddfa5fcada98134fe649558c167fd93a85 100644 (file)
@@ -29,10 +29,10 @@ expression : NAME
            | expression SP0 AND_OP AND_OP SP0 expression
            | expression SP0 AND_OP SP0 expression
            | l_expression and_word r_expression
-           | NOT_OP SP0 expression
            | expression SP0 OR_OP OR_OP SP0 expression
            | expression SP0 OR_OP SP0 expression
            | l_expression or_word r_expression
+           | NOT_OP SP0 expression
            | expression_parens
 
 l_expression : expression_parens
index c28474bda544e2e213ef921f917e6f04e79c8b3a..68800acb55816336e8092c9c0ae2a6a1533d2fb7 100644 (file)
@@ -40,10 +40,6 @@ def p_expression_op_word(p):
     elif p[2] in ('OR', 'or'):
         p[0] = ('OR', p[1], p[3])
 
-def p_expression_not(p):
-    """expression : NOT_OP SP0 expression"""
-    p[0] = ('NOT', p[3])
-
 def p_expression_or_or(p):
     """expression : expression SP0 OR_OP OR_OP SP0 expression"""
     p[0] = ('OR', p[1], p[6])
@@ -52,6 +48,10 @@ def p_expression_or(p):
     """expression : expression SP0 OR_OP SP0 expression"""
     p[0] = ('OR', p[1], p[5])
 
+def p_expression_not(p):
+    """expression : NOT_OP SP0 expression"""
+    p[0] = ('NOT', p[3])
+
 def p_expression_in_parens(p):
     """expression : expression_parens"""
     p[0] = p[1]