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 回答