我正在尝试为语法编写一个简单的解析器。解析器不需要创建解析树,只识别句子是否与语法匹配。到目前为止,我有以下谓词,使用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],[])。我应该得到一个真实的回应,但我得到一个假的。缺少什么导致了这个?谢谢你的帮助。
答案 0 :(得分:0)
stmt_list
也可以为空。添加stmt_list --> []
可以解决问题。