В чем разница между анализатором и сканером? - PullRequest
15 голосов
/ 16 ноября 2009

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

Ответы [ 2 ]

21 голосов
/ 16 ноября 2009

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

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

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

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

3 голосов
/ 16 ноября 2009

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

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

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

...