def METHOD_NAME(self):
    # supported operators => (OR, AND, <
    OperatorOR = Literal("OR").setParseAction(downcaseTokens) | Literal("or")
    OperatorAND = Literal("AND").setParseAction(downcaseTokens) | Literal("and")
    Operator = OperatorAND | OperatorOR
    lpar = Literal("(").suppress()
    rpar = Literal(")").suppress()
    BinOperator = Literal("<=") | Literal(">=") | Literal("==") | Word("<>", max=1)
    # describes an individual leaf node
    leafNode =  (Optional("!") + Word(alphanums+'-_./\?!@#$^&*%')).setParseAction( createAttribute )
    # describes expressions such as (attr < value)
    leafConditional = (Word(alphanums) + BinOperator + Word(nums)).setParseAction( parseNumConditional )
    # describes the node concept
    node = leafConditional | leafNode 
    expr = Forward()
    term = Forward()
    atom = lpar + expr + rpar | (node).setParseAction( pushFirst )
    term = atom + ZeroOrMore((Operator + term).setParseAction( pushFirst ))
    expr << term + ZeroOrMore((Operator + term).setParseAction( pushFirst ))
    finalPol = expr#.setParseAction( printStuff )
    return finalPol