From: Oleg Broytman Date: Sun, 22 Jun 2014 00:03:52 +0000 (+0400) Subject: Reorder handling: AND - OR - NOT X-Git-Tag: v0.3~3 X-Git-Url: https://git.phdru.name/?p=phdru.name%2Fcgi-bin%2Fblog-ru%2Fsearch-tags.git;a=commitdiff_plain;h=84b9307263ed23679ffaf7ff2a4ded0a259a8778 Reorder handling: AND - OR - NOT --- diff --git a/parser/grammar b/parser/grammar index 6944378..b88b9ed 100644 --- a/parser/grammar +++ b/parser/grammar @@ -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 diff --git a/parser/parser.py b/parser/parser.py index c28474b..68800ac 100644 --- a/parser/parser.py +++ b/parser/parser.py @@ -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]