写一个Prolog解析器

时间:2012-05-03 14:58:13

标签: parsing prolog dcg

我正在尝试为语法编写一个简单的解析器。解析器不需要创建解析树,只识别句子是否与语法匹配。到目前为止,我有以下谓词,使用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-->[/].

使用诸如程序之类的查询([read,id],[])。我应该得到一个真实的回应,但我得到一个假的。缺少什么导致了这个?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

stmt_list也可以为空。添加stmt_list --> []可以解决问题。