Создание дерева синтаксического анализа для определения правильности данной грамматики LL

У меня есть программа, которая в настоящее время будет генерировать вывод токенов, которые будут использоваться для ввода в следующей программе. Это будет проверка правильности синтаксиса кода.

У меня возникают проблемы с тем, как начать преобразовывать эту грамматику в полезную программу.

Ниже приведено использование грамматики, как бы я начал это делать. Или где хорошие ресурсы, чтобы помочь себе изучить основы создания собственного парсера.

Эта реализация будет использовать Java, поэтому, если бы у вас были ответы, соответствующие реализации Java, это было бы здорово.

программа → stmt_list $$$

stmt_list → stmt stmt_list | ε

stmt → id = выражение | входной идентификатор | распечатать выражение

выражение → термин term_tail

term_tail → добавить операционный термин term_tail | ε

термин → фактор fact_tail

fact_tail → mult_op fact fact_tail | ε

коэффициент → (выражение) | номер | я бы

add_op → + | -

mult_op → * | / | // | %


person Felauras    schedule 21.04.2018    source источник


Ответы (1)


You should start by reading the Syntax Analysis chapter of Compilers - Principles, Techniques, and Tools, also known as the dragon book.
The steps for checking the output tokens are:

  • Создайте группы First и Follow.
  • Создайте таблицу предиктивного синтаксического анализа.
  • Проверьте наличие нескольких продуктов в одной ячейке таблицы (конфликт)

  • All of these steps can be found in the dragon book perfectly explained with their respective algorithms.
    I hope this helps. This is actually just a step before a parse, so if you got to the point of being able to check if the grammar is LL(1), I recommend implementing the parse algorithm, which is just having a stack where you push non-terminals and refer to the table to produce the AST.

    person alexfertel    schedule 24.04.2018
    comment
    Спасибо, это помогло подтолкнуть меня в правильном направлении для завершения этого задания. - person Felauras; 28.04.2018