Написание парологического пролога
Я пытаюсь написать простой парсер для грамматики. Синтаксическому анализатору не нужно создавать дерево разбора, он распознается только в том случае, если предложение соответствует грамматике. Пока у меня есть следующие предикаты, использующие нотацию 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 ответ
Решение
stmt_list
также может быть пустым. Добавление stmt_list --> []
решает проблему.