Процесс синтаксического анализа в построении компилятора
В настоящее время я читаю Dragonbook.
В главе 2 объясняется процесс синтаксического анализа. Я изо всех сил пытаюсь понять всю картину этого процесса. Читая книгу, я иногда путаюсь, в каком порядке происходят вещи в синтаксическом анализаторе.
Итак, из моего понимания:
Синтаксический анализатор содержит определение синтаксиса, которое определяет грамматику с использованием контекстно-свободной грамматики. Это в основном "первая часть" синтаксического анализатора? Так включает ли синтаксический анализатор определение синтаксиса?
После этого сгенерированные токены с помощью Lexical Analyzer поступают в Syntax Analyzer. Синтаксический анализатор затем проверяет через CFG, является ли ввод строки действительным, путем генерации дерева разбора.
И, насколько я понимаю, это дерево разбора в конечном итоге станет (абстрактным) синтаксическим деревом (которое содержит меньше деталей, чем дерево разбора). Это дерево войдет в семантический анализатор.
Может ли кто-нибудь подтвердить правильность и правильность моего "общего представления" о синтаксическом анализаторе?
1 ответ
Синтаксический анализатор содержит определение синтаксиса, которое определяет грамматику с использованием контекстно-свободной грамматики.
Нет. В парсерных таблицах он содержит таблицу, которая была сгенерирована из грамматики и которая управляет парсером. В рукописных синтаксических анализаторах структура кода сильно отражает грамматику. Ни в том, ни в другом случае было бы неправильно сказать, что синтаксический анализатор фактически "содержит" грамматику. Он как-то разбирает ввод по грамматике.
Это в основном "первая часть" синтаксического анализатора?
Нет, я не знаю, откуда у тебя "первая часть".
Так включает ли синтаксический анализатор определение синтаксиса?
Только как описано выше.
После этого
Нет, до этого
сгенерированные токены Lexical Analyzer поступают в Syntax Analyzer. Синтаксический анализатор затем проверяет, через CFG, допустим ли ввод строки
Правильный.