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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

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