[От парня, который делает собственный инструмент лексера и все еще пытается выучить ANTLR]
Скучный исчерпывающий ответ:
Вы правы.Многие книги и курсы смешивают оба инструмента.И иногда «генерация / обнаружение токенов» и «интерпретация токенов» могут смешиваться.
Иногда разработчик пытается сделать сканер и все же смешивает сканирование и анализ в своем уме; -)
Обычно при обнаружении токенов также необходимо выполнить действие («интерпретация»), столь же простое, как печать сообщения или найденного токена в строку.Пример: "{cout <<" Привет, я нашел целочисленную константу "<<" \ n "}" </p>
В некоторых темах сканирование может быть затруднено для начинающего.
В одном случае несколько текстов могут использоваться для разных токенов.
Пример:
"-" в качестве бинарного оператора вычитания, а "-" в качествеоператор отрицательного префикса.Или, рассматривая 5 как целое число и число с плавающей точкой.В сканерах «-» можно рассматривать как один и тот же токен, а в синтаксических анализаторах вы можете рассматривать его как разные токены.
Чтобы исправить это, мой любимый подход - использовать «универсальные токены», впроцесс сканирования / лексера, а затем преобразовать их как «пользовательские токены» в процессе синтаксического анализа / синтаксиса.
Быстрый ответ:
Как упоминалось в предыдущих ответах,начните с создания грамматики, на самом деле, я предлагаю попробовать ее на доске или в тетради, а позже - в своем любимом (ANTLRL, другом) инструменте сканирования.
Рассмотрим те особые случаи, когда могут быть некоторые наложения токенов.
Удачи.