Шта је лексичка анализа?
ЛЕКСИЧКА АНАЛИЗА је прва фаза у дизајнирању компајлера. Лекер узима модификовани изворни код који је написан у облику реченица. Другим речима, помаже вам да конвертујете низ знакова у низ токена. Лексички анализатор разбија ову синтаксу на низ токена. Уклања сваки додатни простор или коментар написан у изворном коду.
Програми који врше лексичку анализу називају се лексички анализатори или лексери. Лекер садржи токенизер или скенер. Ако лексички анализатор открије да је токен неважећи, генерише грешку. Чита токове знакова из изворног кода, проверава легалне токене и прослеђује податке анализатору синтаксе када то затражи.
Пример
How Pleasant Is The Weather?
Погледајте овај пример; Овде лако можемо препознати да постоји пет речи Хов Плеасант, Тхе, Веатхер, Ис. То је за нас врло природно јер препознајемо сепараторе, празнине и интерпункцијски симбол.
HowPl easantIs Th ewe ather?
Сада, погледајте овај пример, можемо и ово прочитати. Међутим, потрајаће неко време јер су сепаратори постављени на Непарна места. То није нешто што вам дође одмах.
У овом упутству ћете научити
- Основне терминологије:
- Архитектура лексичког анализатора: Како се препознају токени
- Улоге лексичког анализатора
- Лексичке грешке
- Опоравак грешке у лексичком анализатору
- Лекицал Анализер вс. Парсер
- Зашто раздвајати Лекицал и Парсер?
- Предности лексичке анализе
- Недостатак лексичке анализе
Основне терминологије
Шта је лексем?
Лексема је низ знакова који су укључени у изворни програм према обрасцу подударања токена. То није ништа друго до пример токена.
Шта је токен?
Токен је низ знакова који представља јединицу информација у изворном програму.
Шта је образац?
Узорак је опис који користи жетон. У случају кључне речи која се користи као знак, образац је низ знакова.
Архитектура лексичког анализатора: Како се препознају токени
Главни задатак лексичке анализе је читање улазних знакова у коду и стварање жетона.
Лексички анализатор скенира целокупан изворни код програма. Идентификује сваки жетон један по један. Скенери се обично примењују за производњу токена само на захтев парсера. Ево како ово ради-
- „Гет нект токен“ је наредба која се из парсера шаље лексичком анализатору.
- По примању ове наредбе, лексички анализатор скенира улаз док не пронађе следећи токен.
- Враћа токен Парсеру.
Лекицал Анализер прескаче размаке и коментаре током стварања ових токена. Ако је присутна било каква грешка, тада ће Лексички анализатор повезати ту грешку са изворном датотеком и бројем линије.
Улоге лексичког анализатора
Лексички анализатор обавља следеће задатке:
- Помаже у идентификовању токена у табели симбола
- Уклања размаке и коментаре из изворног програма
- Повезује поруке о грешкама са изворним програмом
- Помаже вам у проширивању макронаредби ако су пронађене у изворном програму
- Читајте улазне знакове из изворног програма
Пример лексичке анализе, токени, не-токени
Размотрите следећи код који се убацује у Лекицал Анализер
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Примери створених жетона
Лексема | Токен |
инт | Кључна реч |
максимум | Идентификатор |
( | Оператор |
инт | Кључна реч |
Икс | Идентификатор |
, | Оператор |
инт | Кључна реч |
И. | Идентификатор |
) | Оператор |
{ | Оператор |
Ако | Кључна реч |
Примери Нонтокенса
Тип | Примери |
Коментар | // Ово ће упоредити 2 броја |
Директива о пре-процесору | #инцлуде <стдио.х> |
Директива о пре-процесору | #дефине НУМС 8,9 |
Макро | НУМС |
Размак | / н / б / т |
Лексичке грешке
Низ знакова који није могуће скенирати ни у један ваљани токен је лексичка грешка. Важне чињенице о лексичкој грешци:
- Лексичке грешке нису врло честе, али њима треба управљати скенер
- Погрешно правопис идентификатора, оператора, кључне речи сматра се лексичком грешком
- Генерално, лексичку грешку узрокује појава неког илегалног лика, углавном на почетку токена.
Опоравак грешке у лексичком анализатору
Ево неколико најчешћих техника опоравка грешака:
- Уклања један знак из преосталог уноса
- У режиму панике, узастопни знакови се увек игноришу док не дођемо до добро обликованог токена
- Уметањем знака који недостаје у преостали улаз
- Замените лик другим знаком
- Транспонујте два серијска знака
Лекицал Анализер вс. Парсер
Лексички анализатор | Парсер |
Сцан Инпут програм | Извршите анализу синтаксе |
Идентификујте жетоне | Креирајте апстрактни приказ кода |
Уметните жетоне у табелу симбола | Ажурирање уноса у табели са симболима |
То генерише лексичке грешке | Генерише стабло рашчлањивања изворног кода |
Зашто раздвајати Лекицал и Парсер?
- Једноставност дизајна: Олакшава процес лексичке анализе и анализе синтаксе уклањањем нежељених токена
- Да бисте побољшали ефикасност компајлера: Помаже вам да побољшате ефикасност компајлера
- Специјализација: могу се применити специјализоване технике за побољшање процеса лексичке анализе
- Преносивост: само скенер захтева комуникацију са спољним светом
- Већа преносивост: специфичности специфичне за улазни уређај ограничене на лекер
Предности лексичке анализе
- Методу лексичког анализатора користе програми попут компајлера који могу да користе рашчлањене податке из кода програмера за креирање компајлираног бинарног извршног кода
- Интернет прегледачи га користе за форматирање и приказивање веб страница уз помоћ рашчлањених података из ЈавсСцрипт, ХТМЛ, ЦСС
- Засебни лексички анализатор вам помаже да направите специјализовани и потенцијално ефикаснији процесор за тај задатак
Недостатак лексичке анализе
- Треба да потрошите значајно време читајући изворни програм и делећи га у облику токена
- Неке регуларне изразе је прилично тешко разумјети у поређењу са ПЕГ или ЕБНФ правилима
- Потребно је више напора за развој и отклањање грешака у лекеру и његовим описима токена
- Додатни режијски трошкови потребни су за генерисање лекер табела и конструкцију токена
Резиме
- Лексичка анализа је прва фаза у дизајнирању компајлера
- Лексема је низ знакова који су укључени у изворни програм према обрасцу подударања токена
- Лексички анализатор је примењен за скенирање целокупног изворног кода програма
- Лексички анализатор помаже да се идентификује жетон у табели симбола
- Низ знакова који није могуће скенирати ни у један ваљани токен је лексичка грешка
- Уклања један знак из преосталог уноса корисно је Начин опоравка од грешке
- Лекицал Анализер скенира улазни програм док парсер врши синтаксну анализу
- Олакшава процес лексичке анализе и анализе синтаксе уклањањем нежељених лексема
- Лексички анализатор користе веб прегледачи за форматирање и приказивање веб страница уз помоћ рашчлањених података из ЈавсСцрипт, ХТМЛ, ЦСС
- Највећи недостатак употребе лексичког анализатора је тај што су му потребни додатни режијски трошкови потребни за генерисање лекер табела и конструкцију токена