如何在Python PLY中列出所有表达式

时间:2018-06-12 02:20:47

标签: python ply

我正在使用PLY并写下以下表达式来匹配这种样本字符串'(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

我不知道如何涵盖所有案例,所以我必须尽可能多地列出它们,我知道这不是很优雅。

优化此表达式的任何想法?非常感谢。

1 个答案:

答案 0 :(得分:0)

假设您在Python中使用PLY,则可以使用以下命令解析此表达式:

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 """

要了解它,请阅读有关BNF语法和PLY docs