Лексер отвечает за первый шаг, и он только .
создать «поток токенов» из текста. Не несет ответственности за
понимая семантику вашего языка, его интересует только
понимание синтаксиса вашего языка.
Например, синтаксис - это правило, которое идентификатор должен использовать только
символы, цифры и подчеркивания - до тех пор, пока они не начинаются с
число. Ответственность лексера - понять это правило.
В этом случае лексер примет последовательность символов
"asd_123", но отклонить символы "12dsadsa" (при условии, что есть
не другое правило, в котором этот текст действителен). При просмотре действительного
текстовый пример, он может испустить токен в поток токенов, такой как
IDENTIFIER (asd_123).
Обратите внимание, что я сказал "идентификатор", который является общим термином для вещей
как имена переменных, имена функций, имена пространств имен и т. д. Парсер
было бы то, что бы понять контекст, в котором это
появляется идентификатор, чтобы он затем дополнительно указывал этот токен
как имя определенной вещи.
(sidenote: токен - это просто уникальное имя, данное элементу
поток токенов. Лексема - это текст, из которого был найден токен.
Я пишу лексему в скобках рядом с токеном. Например,
НОМЕР (123). В данном случае это токен NUMBER с лексемой
'123'. Однако с некоторыми токенами, такими как операторы, я опускаю лексему
так как это избыточно. Например, я бы написал SEMICOLON для
Точка с запятой, а не SEMICOLON (;)).