]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/blobdiff - parser/parser.py
Allow '||'
[phdru.name/cgi-bin/blog-ru/search-tags.git] / parser / parser.py
index c74eb78d21a29a5d33ec85af523ed85266b41796..1fb9903c62ee93794a22925678df963c728d4f2c 100644 (file)
@@ -6,7 +6,7 @@ literals = '()'
 
 tokens = ('NAME', 'AND_OP', 'OR_OP', 'NOT_OP')
 
-t_NAME = '[a-z][a-z0-9_]+'
+t_NAME = '[a-z][a-z0-9_]*'
 
 t_AND_OP = '&'
 
@@ -14,6 +14,8 @@ t_OR_OP = r'\|'
 
 t_NOT_OP = '!'
 
+t_ignore = '[ \t]+'
+
 def t_error(t):
     """Avoid warnings on stderr"""
 
@@ -23,6 +25,10 @@ def p_expression_name(p):
     """expression : NAME"""
     p[0] = ('NAME', p[1])
 
+def p_expression_and_and(p):
+    """expression : expression AND_OP AND_OP expression"""
+    p[0] = ('AND', p[1], p[4])
+
 def p_expression_and(p):
     """expression : expression AND_OP expression"""
     p[0] = ('AND', p[1], p[3])
@@ -31,6 +37,10 @@ def p_expression_not(p):
     """expression : NOT_OP expression"""
     p[0] = ('NOT', p[2])
 
+def p_expression_or_or(p):
+    """expression : expression OR_OP OR_OP expression"""
+    p[0] = ('OR', p[1], p[4])
+
 def p_expression_or(p):
     """expression : expression OR_OP expression"""
     p[0] = ('OR', p[1], p[3])