Search code examples
pythonply

How to list all expressions in Python PLY


I'm using PLY and have written below expressions to match this kind of sample string '(A OR B OR C)'.

expression : LPAREN KEYWORD AND KEYWORD RPAREN
           | LPAREN KEYWORD OR KEYWORD RPAREN
           | LPAREN KEYWORD AND KEYWORD AND KEYWORD RPAREN
           | LPAREN KEYWORD OR KEYWORD OR KEYWORD RPAREN
           | LPAREN KEYWORD AND KEYWORD AND KEYWORD AND KEYWORD RPAREN
           | LPAREN KEYWORD OR KEYWORD OR KEYWORD OR KEYWORD RPAREN
           | LPAREN KEYWORD AND KEYWORD AND KEYWORD AND KEYWORD AND KEYWORD RPAREN
           | LPAREN KEYWORD OR KEYWORD OR KEYWORD OR KEYWORD OR KEYWORD RPAREN
           | LPAREN KEYWORD AND KEYWORD AND KEYWORD AND KEYWORD AND KEYWORD AND KEYWORD RPAREN
           | LPAREN KEYWORD OR KEYWORD OR KEYWORD OR KEYWORD OR KEYWORD OR KEYWORD RPAREN

I have no idea how to cover all cases so I have to list them as many as possible and I know that's not elegant.

Any ideas to optimize this expression? Thanks a lot.


Solution

  • Assuming you're using PLY in Python, you can parser this expression with this:

    def p_condition(p):
        """ condition : LPAREN comparation RPAREN """
    
    
    def p_comparation(p):
        """ comparation : KEYWORD operator KEYWORD
                        | comparation operator KEYWORD  """
    
    def p_operator(p):
        """operator : AND
                    | OR """
    

    To understand it, read about BNF grammar, and the PLY docs