Дефиниране на типове токени
- константи (числови, низови, символни);
- ключови думи на езика за въвеждане,
- знаци за операция (аритметика, логика, отношения),
Тъй като границите на токените може да не са посочени в изходната програма, лексикалният анализатор не винаги може да отдели лексемите недвусмислено. Пример, когато на етапа на лексикалния анализ няма достатъчно информация за определяне на следващата лексема, е следният оператор на езика C:
k = i+++++j;.
Има само една правилна интерпретация на този оператор:
k = (i++) + (++j);,
които могат да бъдат получени само на етапа на синтактичния анализ. Повечето лексикални анализатори конструират възможно най-дългата езикова конструкция, така че тази конструкция ще бъде разбита на отделни токени, както следва:
k = i ++ ++ + j;.
Определение на синтаксиса на токена
Лексикалният анализ се извършва удобно на базата на детерминиран краен преобразувател, така че синтаксисът на токените трябва да бъде описан с помощта на автоматни граматики.
Дефинирането на автоматични граматики, които описват синтаксиса на лексемите, се препоръчва да се извършва в следния ред:
1. Разделете символите, използвани за писане на програми във входния език, на класове. Един клас съдържа знаци, които се използват по същия начин за образуване на лексеми. Примери за символни класове са: латинска буква, двоична цифра, десетична цифра, символ "=".
2. Съставяне на автоматични граматики, които описват синтаксиса на лексемите, при условие че крайните символи на граматиката са символни класове, а началният символ на граматиката е символътS.
Следните автоматни граматични правила, в коитобуквае класът „латинска буква“,числоекласът "цифра", е-клас, който включва всички знаци с изключение на латински букви и цифри, описва синтаксиса на идентификатор:
S | а | буквен идентификатор |
Id | а | буквен идентификатор |
Id | а | цифрен идентификатор |
Id | а | e, |
Изграждане на диаграма на лексикален анализатор
Изграждането на диаграма на лексикален анализатор се извършва в следната последователност:
1. За всяка лексема постройте краен автоматен граф, в който началното състояние е отбелязано със символаS, а крайното състояние, съответстващо на края на анализа на лексемата, е отбелязано със символаF. Фигура 2.1 показва графики на крайни автомати за разпознаване на лексемите "идентификатор" и "цяло число без знак".
2. Комбинирайте началните и крайните състояния на отделни крайни автомати (фиг. 2.2). Ако конструираният по този начин краен автомат е недетерминиран, преобразувайте го в детерминистичен краен автомат (DFA). Получената DFA графика се нарича диаграма на лексикален анализатор.
3. Разработете структури от данни (формат на таблица) за съхраняване на токени от различни типове и структура от данни за представяне на токени. Имайте предвид, че структурите от данни, разработени на етапа на лексикалния анализ, ще бъдат прецизирани на етапа на синтактичния анализ.
4. Определете външните спецификации на процедури (функции), които описват семантиката на превода на изходния текст на програмата, представен като низ от знаци, в низ от токени. Такива процедури включват процедурите за четене на символ от входния поток и определяне на неговия клас, формиране на следващия токен и определяне на неговия тип, търсене (записване) на токен всъответната таблица, генерирайки токен и записвайки го в изходния поток.
1. Включете описание на семантиката на лексикалния анализ в диаграмата на лексикалния анализатор, като заредите краищата на DFA графиката с имената на процедурите (функциите), които да бъдат изпълнени по време на преходи между състояния.
Тестване на лексикалния анализатор
Тестването на лексикален анализатор се състои в моделиране на неговата работа. Резултатът от стъпката на лексикалния анализ са ръчно попълнени таблици и изходен поток от токени за тестов случай, който е програма на входния език