Написание парологического пролога

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

Другие вопросы по тегам