Как перечислить все выражения в Python PLY - PullRequest
0 голосов
/ 12 июня 2018

Я использую PLY и написал ниже выражения, соответствующие этому типу строки '(A ИЛИ B ИЛИ 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 голосов
/ 07 июля 2018

Предполагая, что вы используете PLY в Python, вы можете разобрать это выражение следующим образом:

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

...