Как лексический анализатор кода работает со "значащими" пробелами? С++
Решил начать изучать, хотя бы в общих чертах, как работают анализаторы. Начал с лексера. В некоторых статьях сказано, что лексер при сканировании кода сначала убирает все пробелы из файла. Отсюда вопрос, а что лексер делает со "значащими" пробелами? Например:
// Тут если убрать пробелы, то будет
// Просто неинициализированное имя:
// typedefintINT
typedef int INT
Или:
// Без пробелов будет inta и лексер не сможет выделить токен правильно
int a = 10;
Как это решается в лексических анализаторах?
Ответы (1 шт):
Когда я делал парсинг, то разбирал код по токенам, а не по символам. Массив из 3 токенов - это одно, а массив из одного токена - совершенно другое. Пробелы имеют значение для разделения токенов, но сами значимым токеном не являются. Скорее всего имеется в виду именно это.
Впрочем, у Си++ вполне есть строгая грамматика и она вполне может работать посимвольно - не уверен. В таком случае пробелы трогать нельзя.