1

文法用の簡単なパーサーを書こうとしています。パーサーは解析ツリーを作成する必要はなく、文が文法と一致するかどうかを認識するだけです。これまでのところ、DCG表記を使用して次の述語があります。

    program-->[].
    program-->stmt_list.
    stmt_list-->stmt,stmt_list.
    stmt-->[id,:=],expr;[read],[id];[write],expr.
    expr-->term, term_tail.
    term_tail-->add_op,term,term_tail.
    term_tail-->[].
    term-->factor, factor_tail.
    factor_tail-->mult_op, factor, factor_tail.
    factor_tail-->[].
    factor-->[(expr)].
    factor-->[id].
    factor-->[number].
    add_op-->[+].
    add_op-->[-].
    mult_op-->[*].
    mult_op-->[/].

program([read、id]、[])などのクエリを使用します。本当の応答が返ってくるはずですが、間違った応答が返ってきます。これを引き起こしている何が欠けていますか?ご協力ありがとうございました。

4

1 に答える 1

1

stmt_list空にすることもできます。追加stmt_list --> []すると問題が解決します。

于 2012-05-03T17:40:47.990 に答える