tgoop.com/goproglib/6505
Create: 
 
Last Update:
Last Update:
Лексер (или лексический анализатор) — это первый этап обработки исходного кода. Он получает на вход строку символов и превращает её в последовательность токенов — элементарных единиц языка.
Если у вас есть код x = 42 + y, лексер разобьёт его примерно так:
• идентификатор x
• оператор =
• число 42
• оператор +
• идентификатор y
Зачем это нужно
Парсеру и компилятору работать с отдельными символами неудобно. Токены — это уже структурированные данные: каждый имеет тип (число, ключевое слово, оператор) и значение. С ними можно строить синтаксическое дерево и анализировать логику программы.
Как устроен лексер в Go
Базовая структура выглядит так:
type Token struct {
    Type  TokenType
    Value string
}
type Lexer struct {
    input   string
    pos     int  // текущая позиция
    readPos int  // следующая позиция
    ch      byte // текущий символ
}Лексер движется по строке посимвольно. Метод
readChar() сдвигает позицию, а NextToken() определяет тип очередного токена по первому символу.Стандартная библиотека
В Go есть пакеты
go/scanner и go/token для работы с самим языком Go. Они показывают профессиональную реализацию лексера: обработку Unicode, точные позиции в файле, все угловые случаи синтаксиса.Если строите свой язык или парсите конфигурационный формат, можете вдохновиться их архитектурой.
Когда писать свой лексер
Для JSON или YAML проще взять готовые библиотеки. Но если вы разрабатываете DSL, шаблонизатор или интерпретатор учебного языка — лексер придётся написать самостоятельно.
#GoDeep

