Python PLY零次或多次出现的解析项

时间:2010-05-08 16:21:47

标签: python parsing yacc ply

我使用Python和PLY来解析类似LISP的S-Expressions,在解析函数调用时,可以有零个或多个参数。我怎么能把它放到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]”。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

这个怎么样:

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

答案 1 :(得分:0)

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