Міністерство освіти Російської Федерації p>
Саратовський державний технічний університет p>
ЛАБОРАТОРНА РОБОТА № 1 p>
Лексичний аналіз вхідного мови транслятора лабораторна робота з курсу «Теорія обчисліть-льних процесів і структур »для студентів спеціальності 220400 (ПВС) p>
Склав доцент кафедри ПВС p>
Сайкін А.І. p>
Саратов, 2001 р. p>
Введення p>
Дана лабораторна робота призначається для студентівспеціальності ПВС вивчають «Теорію обчислювальних процесів і структур».
Лабораторна робота розрахована на 4 аудиторних годин і 6 годинсамостійної роботи по складаннюпрограми, вивчення літератури і складання звіту. p>
Об'єкт дослідження - транслятори з алгоритмічних мовпрограмування. Процес трансляції з алгоритмічної мови можна умовнорозбити на три етапи: лексичний аналіз, граматичний розбір і генераціюмашинного коду. У даній роботі розглядається задача побудовилексичного аналізаторавхідного тексту транслятора. p>
Мета роботи полягає в складанні програми (сканера) виробляєлексичний аналіз тексту, що відповідає заданому абеткою і граматикиалгоритмічної мови. p>
Програма складається на мовах Паскаль і С + + за вибором студента всередовищі WINDOWS. p>
1. Зміст роботи. P>
Етап лексичного аналізу тексту вихідної програми виділяється всамостійний етап роботи транслятора, як з методичною метою, так і зметою скорочення часу компіляції програми. Остання досягається зарахунок того, щовихідна програма у вигляді послідовності символів, перетвориться наетапі лексичної обробки до деякого стандартного виду, що полегшуєподальший аналіз. p>
Під лексичним аналізом розуміють процес попередньої обробкивихідної програми, на якому основні лексичні одиниці програми --лексеми: ключові слова, ідентифікатори, мітки, константи приводяться доєдиного формату і замінюються умовними кодами або посиланнями навідповідні таблиці, а коментарі виключаються з тексту програми.
Результатом лексичного аналізу є список лексем-дескрипторів ітаблиці. У таблицях зберігаються значення виділених у програмі лексем. P>
Дескриптор-це пара виду: (. <Покажчик>),де - це, як правило, числовий код класу лексеми, якийозначає, що лексема належить одному з кінцевим безлічі класівслів, виділених у мові програмування; p>
- це може бути або початкова адреса області основноюпам'яті, у якій зберігається адреса цієї лексеми, або число, що адресуютьелемент таблиці, в якій зберігається значення цієї лексеми. p>
Кількість класів лексем у мовах програмування може бутирізним. Найбільш поширеними класами є: ідентифікатори; службові (ключові) слова; роздільники; константи. P>
Можуть вводитися й інші класи. Це обумовлено в першу чергу тієїроллю, яку відіграють різні види слів при написанні вихідної програмиі переведення її в машинну програму. При цьому найбільш переважнимє розбиття всієї безлічі слів, що допускаються в мовіпрограмування, на такі класи, які б не перетиналися між собою.
У загальному випадку всі виділяються класи є або кінцевими (ключовіслова, роздільники та ін) - класи фіксованих для даної мовипрограмування слів, абонескінченними або дуже великими (ідентифікатори, константи, мітки) - класизмінних для даної мови програмування слів. p>
З цих позицій коди лексем (дескриптори) з кінцевих класів завждиодні й ті ж в різних програмах для даного компілятора. Коди ж лексемз нескінченних класів різні для різних програм і формуються всякийраз на етапі лексичного аналізу. p>
У ході аналізу лексичного значення лексем з нескінченних класівмістяться в таблиці відповідних класів. Кінцівка таблиць пояснюєобмеження, що існують в мовах програмування на довжини івідповідно число використовуваних у програмі ідентифікаторів і констант. p>
Числові константи перед приміщенням їх у таблицю можуть переводитисяіз зовнішнього символьного у внутрішнє машинне подання. Вмісттаблиць, особливо таблиці ідентифікаторів, надалі поповнюється наетапі семантичного аналізу початкової програми і використовується на етапістворення об'єктної програми. p>
У роботі потрібно скласти програму лексичного аналізатора
(сканер) вхідного тексту для транслятора, яка бстановила таблиці та виробила б кодування ідентифікаторів,роздільників і констант. Виробляла б перевірку правильності написанняключових слів операторів, стандартних функцій та використання службовихсимволів.
Виробляла б відображення тесту програми з коментарями і виключала бїх з тексту, що підлягає трансляції. Відображаладескріпторний текст. p>
2. Завдання по роботі. P>
2.1. Отримати варіант завдання у викладача. P>
2.2. Відповідно до виданого варіантом виконати наступне: p>
2.2.1. Скласти технічне завдання (ТЗ) на розробкупрограми сканера, що виробляє лексичний аналіз довільних текстів умежах встановленого алфавіту. p>
2.2.2. Узгодити ТЗ з викладачем. P>
2.2.3. Розробити програму-сканер на мовах
Паскаль, С + + або в інтегрованих середовищах на власний розсуд. P>
2.2.4. Провести тестування програми, особливо для всіхвипадків видачі користувачеві повідомлень про помилки. p>
2.2.5. Скласти звіт по роботі і прикласти до неї ТЗ. P>
3. Варіанти завдань. P>
Варіант завдання включає номер, що складається з трьох цифр.
Перша цифра означає вибір алфавіту вхідної мови, друга цифра означаєвибір заданих ключових слів вхідного мови і третя цифра означає вибірзаданих бібліотечних функцій. p>
Таблиця 1. Алфавіт вхідної мови.
| № | Алфавіт |
| 1 | Латинську, малі літери |
| 2 | Латинську, великі літери |
| 3 | Кирилиця, малі літери |
| 4 | Кирилиця, великі літери |
| 5 | Латинську, малі + заголовні |
| 6 | Кирилиця, малі + заголовні | p>
Таблиця 2. Ключові слова.
| № | Додаткові ключові слова |
| 1 | Опис циклів, масивів |
| 2 | Опис операторів переходу, |
| | Структури типу switch |
| 3 | Опис безумовних переходів, |
| | Опис функцій | p>
Таблиця 3. Бібліотечні функції.
| № | Стандартні функції |
| 1 | sin, cos, tan, exp |
| | Sqrt, log, ln, nearby |
| 2 | |
| 3 | abs, fact, code, sign | p>
Наприклад, 1-2-3 означає, що з першої таблиці необхідно вибратиперший рядок, з другого таблиці - другий рядок, з третьої таблиці --третій рядок. p>
Для всіх варіантів задається загальна частина в яку входить наступне.
Ключові слова позначають початок і кінець програми, опис типу, введення тависновок, присвоювання. p>
Роздільники: +, -, *,:, _, /, (,), (,), =,, [,
],;, ", ',', 'І про -бел. p>
Ідентифікатори повинні починатися з літери, не включати в себероздільники, кількість позицій не повинне перевищувати 14. p>
Текст програми повинен допускати використання коментарів. p>
4. Методичні вказівки. P>
Розглянемо основні ідеї, що лежать в основіпобудови лексичного аналізатора, і проблеми, що виникають при йогорозрядівлення. p>
Спочатку в тексті вхідний програми сканер виділяєпослідовність символів, яка за його припущенням має бутисловом в програмі, тобто лексемою. Може виділятися не всяпослідовність, а тільки один символ, який вважається початкомлексеми. Це зробити просто, якщо слова в програмі відокремлюються один відодного спеціальними роздільниками,наприклад, пробілами або заборонено використання службових слів якзмінних, або класи лексем розпізнаються по входженню перших символівлексеми. p>
Потім, проводиться ідентифікація лексеми. Вона полягаєв збірці лексеми із символів, починаючи з виділеного на попередньому етапі, іперевірки правильності запису лексеми даного класу. p>
Ідентифікація лексеми з кінцевого класу виконується шляхом порівнянняїї з еталонним значенням. Основна проблема тут - мінімізація часупошуку еталона. У загальному випадку може знадобитися повний перебір слівданого класу, особливо, якщо виділене слово містить помилку. Зменшитичас пошуку можна, використовуючи різні методи прискореного пошуку:упорядкований список, лінійний список, метод розстановки та ін p>
Для ідентифікації з дуже великих класів використовуються спеціальніметоди складання лексем з одночасною перевіркою правильності написання. Уцих методах застосовується формальний математичний апарат-теоріярегулярних мов і кінцевих розпізнавачем. p>
При успішній ідентифікації значення лексеми з нескінченного класупоміщається в таблицю ідентифікації лексем даного класу. При цьомуздійснюють перевірку: не зберігається чи вже там значення даної лексеми, тобтонеобхідно проводити перегляд елементів таблиці. Таблиця при цьому повиннадопускати розширення. Знову ж таки для зменшення часу доступу до елементівтаблиці вона повинна бути певним чином організована, при цьому повиннівикористовуватися спеціальні методи прискореного пошуку елементів. p>
Після проведення успішної ідентифікації лексеми формується її образ
- Дескриптор, він міститься у вихідні дані лексичного аналізатора. Увипадку невдалої ідентифікації формується повідомлення про помилки внаписанні слів програми. p>
У ході лексичного аналізу можуть виконуватися і інші видилексичного контролю, зокрема, перевірятися парність дужок та іншихпарних символів, наявність позначки в оператора, наступного за GOTO і т.д. p>
Результати роботи сканера передаються у наслідку на вхідсинтаксичного анлізатора. Є дві можливості їх зв'язку:роздільна зв'язок і нероздільно зв'язок. p>
При роздільному зв'язку вихідні дані сканера формуютьсяповністю і потім передаються синтаксичному аналізатору. Принероздільною зв'язку, коли синтаксичному аналізатору потрібночерговий образ лексеми, він викликає лексичний аналізатор, кото -рий генерує дескриптор і повертає керування синтаксичноюаналізатора. p>
Другий варіант характерний для однопрохідних трансляторів.
Таким чином, процес лексичного аналізу достатньо простий, але можезаймати значний час трансляції. p>
Розглянемо конкретний приклад. Нехай нам дана програма надеякому алгоритмічній азике: p>
PROGRAM PRIMER; p>
VAR X, Y, Z: REAL; p>
BEGIN p>
X: = 5; p>
Y: = 6; p>
Z: = X + Y; p>
END; p>
Застосуємо наступні коди для типів лексем:
К1-ключове слово; p>
К2-роздільник; p>
К3-ідентифікатор; p>
К4-константа. p>
Лексичний аналіз можна робити, якщо нам задано алфавіт,список ключових слів мови і службових символів.
Нехай все це є. Тоді внутрішні таблиці сканера візьмутьнаступний вигляд. p>
Таблиця 4. Ключові слова. P>
| № | Ключове слово |
| 1 | PROGRAM |
| 2 | BEGIN |
| 3 | END |
| 4 | FOR |
| 5 | REAL |
| 6 | VAR | p>
Таблиця 5. Роздільники.
| № | Роздільники |
| 1 |; |
| 2 |, |
| 3 | + |
| 4 | - |
| 5 |/|
| 6 | * |
| 7 |: |
| 8 | = |
| 9 |. | p>
Результат роботи сканера таблиця ідентифікаторів і таблиця констант p>
Таблиця 6. Ідентифікатори.
| № | Ідентифікатори |
| 1 | PRIMER |
| 2 | X |
| 3 | Y |
| 4 | Z | p>
Таблиця 7. Константи.
| № | Знач. констант |
| 1 | 5 |
| 2 | 6 | p>
На підставі складених таблиць можна записати вхідний текст черезвведені дескриптори (дескріпторний текст): p>
(К1, 1) (К3, 1) (K2, 1) p>
(K1, 6) (K3, 2) (K2, 2 ) (k3, 3) (K2, 2) (K3, 4) (K2, 7) (K1, 5) (K2,
1) p>
(K1, 2) p>
(K3, 2) (K2, 7) (K2, 8) (K4, 1) (K2, 1) p>
(K3, 3) (K2, 7) (K2, 8) (K4, 2) (K2, 1) p>
(K3, 4) (K2, 7) (K2, 8) (K3, 2) (K2, 3) (K3, 3) (K2, 1) p>
(K1, 3) (K2, 9). p>
6. Зміст звіту. P>
1. Титульний лист. P>
2. Варіант завдання. P>
3. Повний список обраних ключових слів і стандартних функцій. P>
4. Внутрішні таблиці сканера. P>
5. Технічне завдання на розробку сканера (по еурд). P>
6. Налагодження приклади роботи сканера з вихідними таблицями ідескріпторним текстом. p>
7. Контрольні питання. P>
1. Дайте визначення граматики. P>
2. Назвіть етапи трансляції програми. P>
3. Що таке лексема? P>
4. У чому полягають завдання лексичного аналізу? P>
5. Дайте визначення метамови. P>
6. Вихідні дані для сканера. P>
7. Результати роботи сканера. P>
8. Література.
1. Бек Л. Введення в системне програмування. М,: Світ, 1988. P>
-448 с.
2. Компанієць Р.І. та ін Системне программірованіе.Основи побудови трансляторів .- СПб.: КОРОНА принт, 2000.-256 с. p>
p>