Лексический анализ: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
уточнение
мНет описания правки
Строка 1:
{{redirect|Лексема (информатика)|Лексема}}
В [[информатика|информатике]] '''лексический анализ''' («токенизация», от {{lang-en|tokenizing}}) — [[Процесс (информатика)|процесс]] аналитического [[разбор]]а входной последовательности [[символ]]ов на распознанные [[группа|группы]] — '''''лексемы''''', с целью получения на выходе идентифицированных последовательностей, называемых «[[токен (лексический анализ)|токенами]]» (подобно [[группировка|группировке]] [[буква|букв]] в [[слово|словах]]).
 
== Смысл ==
В простых [[случай|случаях]] понятия «лексема» и «токен» идентичны, но более сложные токенизаторы дополнительно классифицируют лексемы по различным типам («идентификатор», «оператор», «часть речи» и т. п.). Лексический анализ используется в [[компилятор]]ах и [[интерпретатор]]ах [[исходный код|исходного кода]] [[язык программирования|языков программирования]], и в различных [[парсер]]ах слов [[Естественный язык|естественных языков]].
 
Как правило, лексический анализ производится с точки зрения определённого [[Формальный язык|формального языка]] или набора языков. Язык, а точнее, его [[грамматика]], задаёт определённый набор лексем, которые могут встретиться на входе процесса.
 
Традиционно принято организовывать процесс лексического анализа, рассматривая входную последовательность символов как поток символов. При такой организации процесс самостоятельно управляет выборкой отдельных символов из входного потока.
Строка 34:
'''Лексический анализатор''' ({{lang-en|lexical analyzer}}, ''lexer''; или «токенизатор» от {{lang-en2|tokenizer}}) — это программа или часть программы, выполняющая лексический анализ. Лексический анализатор обычно работает в две стадии: ''сканирование'' и ''оценка''.
 
На первой стадии, сканировании, лексический анализатор обычно реализуется в виде [[конечный автомат|конечного автомата]], определяемого [[регулярные выражения|регулярными выражениями]]. В нём кодируется информация о возможных последовательностях символов, которые могут встречаться в токенах. Например, токен «целое число» может содержать любую последовательность десятичных цифр. Во многих случаях первый непробельный символ может использоваться для определения типа следующего токена, после чего входные символы обрабатываются один за другим, пока не встретится символ, не входящий во множество допустимых символов для данного токена. В некоторых языках правила разбора лексем несколько более сложные и требуют возвратов назад по читаемой последовательности.
 
Полученный таким образом токен содержит необработанный исходный текст (строку). Для того, чтобы получить токен со значением, соответствующим типу (напр. целое или дробное число), выполняется оценка этой строки — проход по символам и вычисление значения.
 
Токен с типом и соответственно подготовленным значением передаётся на вход [[синтаксический анализ|синтаксического анализатора]].