В чем разница между парсером и сканером?


Я уже сделал сканер, теперь я должен сделать парсер. В чем же разница?

2 14

2 ответа:

Сканер просто превращает входную строку (скажем, файл) в список маркеров. Эти маркеры представляют такие вещи, как идентификаторы, скобки, операторы и т. д.

Синтаксический анализатор преобразует этот список лексем в древовидный объект, чтобы показать, как лексемы подходят друг к другу, образуя связное целое (иногда называемое предложением).

В терминах синтаксических анализаторов языка программирования выходные данные обычно называются абстрактным синтаксическим деревом (AST). Каждый узел в AST представляет собой другая конструкция языка, например, оператор IF будет узлом с 2 или 3 подузлами, узлом условия, узлом THEN и потенциально узлом ELSE.

Синтаксический анализатор не дает узлам никакого смысла, кроме структурной связности. Следующее, что нужно сделать, - это извлечь смысл из этой структуры (иногда называемый контекстуальным анализом).

Синтаксический анализ (в общем смысле) заключается в превращении символов (символов, цифр, левых паренхим и т. д.) В предложения Вашей грамматики.

Лексический анализатор ("лексер") анализирует отдельные символы из файла исходного кода на токены. Отсюда собственно "парсер" превращает все эти лексемы в предложения Вашей грамматики.

Другими словами, лексер объединяет символы в лексемы, а синтаксический анализатор объединяет лексемы для формирования предложений.