+from lark import Lark, Transformer
+
+
+class TagsTransformer(Transformer):
+ def and_expression(self, items):
+ left = items[0]
+ right = items[2]
+ if len(items) > 3:
+ right = self.and_expression(items[2:])
+ return ('AND', left, right)
+
+ def or_expression(self, items):
+ left = items[0]
+ right = items[2]
+ if len(items) > 3:
+ right = self.or_expression(items[2:])
+ return ('OR', left, right)
+
+ def not_expression(self, items):
+ return ('NOT', items[1])
+
+ def expression_parens(self, items):
+ return ('PARENS', items[0])
+
+ def name(self, name):
+ return ('NAME', name[0].value)