3

私はPythonとPLYを使用してLISPのようなS式を解析していますが、関数呼び出しを解析するときは、0個以上の引数が存在する可能性があります。これを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]」を0個以上のEXPRを許可するものに置き換える必要があります。これどうやってするの?

4

2 に答える 2

2

これはどう:

EXPR : NUMBER
        | STRING
        | LPAREN funcname EXPR_REPEAT RPAREN
EXPR_REPEAT: /*nothing*/
        | EXPR EXPR_REPEAT
于 2010-05-08T16:50:39.640 に答える
0

構文解析式の文法ではなく、文脈自由文法が必要ですか?また、私の経験では、PLYの設計は文法と解析および後処理を非常にうまく結合していないため、よりモジュール化された設計の実装をお勧めします。

于 2012-03-21T18:23:21.337 に答える