Лексический анализ


В компьютерных науках лексический анализ , лексирование или токенизация — это процесс преобразования последовательности символов (например, в компьютерной программе или веб-странице ) в последовательность лексических токенов ( строки с присвоенным и, таким образом, идентифицированным значением). Программу, которая выполняет лексический анализ , можно назвать лексером , токенизатором [1] или сканером , хотя сканер также является термином для первой стадии лексера. Лексер обычно сочетается с парсером, которые вместе анализируют синтаксис языков программирования , веб-страниц и так далее.

Лексер формирует первую фазу внешнего интерфейса компилятора в современной обработке. Анализ обычно происходит за один проход.

В более старых языках, таких как ALGOL , начальным этапом была реконструкция строки , которая выполняла расшифровку и удаляла пробелы и комментарии (и имела синтаксические анализаторы без сканирования, без отдельного лексера). Эти шаги теперь выполняются как часть лексера.

Лексеры и синтаксические анализаторы чаще всего используются для компиляторов, но могут использоваться и для других компьютерных языковых инструментов, таких как prettyprinters или linters . Лексирование можно разделить на два этапа: сканирование , которое сегментирует входную строку на синтаксические единицы, называемые лексемами , и классифицирует их по классам токенов; и вычисление , которое преобразует лексемы в обработанные значения.

Лексеры, как правило, довольно просты, большая часть сложности отложена на фазы синтаксического анализатора или семантического анализа , и часто могут быть сгенерированы генератором лексеров , особенно lex или производными. Однако иногда лексеры могут включать некоторую сложность, например обработку структуры фразы, чтобы упростить ввод и упростить синтаксический анализатор, и могут быть написаны частично или полностью вручную либо для поддержки дополнительных функций, либо для повышения производительности.

Лексический анализ также является важным ранним этапом обработки естественного языка , когда текст или звуковые волны разделяются на слова и другие единицы. Это требует множества решений, которые не полностью стандартизированы, и количество токенов, производимых системами, варьируется для таких строк, как «1/2», «стул», «не может», «и/или», «1/1/». 2010", "2х4", "...," и многие другие. Это отличается от лексического анализа для программирования и подобных языков, где точные правила обычно определены и известны.