我正在使用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
我不知道如何涵盖所有案例,所以我必须尽可能多地列出它们,我知道这不是很优雅。
优化此表达式的任何想法?非常感谢。
答案 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