Python允许零次或多次出现解析项

Python允许零次或多次出现解析项,python,parsing,yacc,ply,Python,Parsing,Yacc,Ply,我使用Python和PLY来解析类似LISP的S表达式,并且在解析函数调用时可以有零个或多个参数。我如何才能将其放入yacc代码中。这是我目前的职能: def p_EXPR(p): '''EXPR : NUMBER | STRING | LPAREN funcname [EXPR] RPAREN''' if len(p) == 2: p[0] = p[1] else: p[0] = ("Cal

我使用Python和PLY来解析类似LISP的S表达式,并且在解析函数调用时可以有零个或多个参数。我如何才能将其放入yacc代码中。这是我目前的职能:

def p_EXPR(p):
    '''EXPR : NUMBER
            | STRING
            | LPAREN funcname [EXPR] RPAREN'''
    if len(p) == 2:
        p[0] = p[1]
    else:
        p[0] = ("Call", p[2], p[3:-1])
我需要将“[EXPR]”替换为允许零个或多个EXPR的内容。我该怎么做?

这个怎么样:

EXPR : NUMBER
        | STRING
        | LPAREN funcname EXPR_REPEAT RPAREN
EXPR_REPEAT: /*nothing*/
        | EXPR EXPR_REPEAT

您确定要的是上下文无关语法而不是解析表达式语法吗?另外,根据我的经验,PLY的设计将语法、解析和后处理结合得非常糟糕,因此我建议采用更模块化的设计实现