Я ищу четкое определение того, что такое "токенизатор", "парсер" и "лексер" и как они связаны друг с другом (например, использует ли парсер токенизатор или наоборот)? Мне нужно создать программу, которая будет проходить через исходные файлы c/h, чтобы извлечь декларацию и определения данных.
Я искал примеры и могу найти некоторую информацию, но я действительно пытаюсь понять основные понятия, такие как правила грамматики, деревья синтаксического анализа и абстрактное синтаксическое дерево и то, как они взаимосвязаны друг с другом. В конце концов, эти концепции необходимо хранить в реальной программе, но 1) как они выглядят, 2) существуют общие реализации.
Я рассматриваю Википедию по этим темам и программам, таким как Lex и Yacc, но никогда не проходил класс компилятора (EE major). Мне трудно понять, что происходит.