Я ищу четкое определение того, что такое «токенизатор», «парсер» и «лексер» и как они связаны друг с другом (например, использует ли парсер токенизатор или наоборот)? Мне нужно, чтобы программа прошла через исходные файлы c / h для извлечения декларации данных и определений.
Я искал примеры и могу найти некоторую информацию, но я действительно изо всех сил пытался понять основные понятия, такие как грамматические правила, деревья синтаксического анализа и абстрактное синтаксическое дерево и как они взаимосвязаны друг с другом. В конечном итоге эти концепции необходимо сохранить в реальной программе, но 1) как они выглядят, 2) существуют ли общие реализации.
Я смотрел на Википедию по этим темам и программам, таким как Lex и Yacc, но никогда не изучая класс компиляторов (EE Major), мне трудно полностью понять, что происходит.
Пример:
Лексер или токенизер разделит это на токены 'int', 'x', '=', '1', ';'.
Парсер возьмет эти токены и использует их для некоторого понимания:
источник
Я бы сказал, что лексер и токенизатор - это одно и то же, и они разбивают текст на составляющие его части («токены»). Затем парсер интерпретирует токены с помощью грамматики.
Я бы не стал слишком зацикливаться на точном терминологическом использовании - люди часто используют «разбор», чтобы описать любое действие по интерпретации кусочка текста.
источник
( добавление к данным ответам )
источник