42367

Побудова лексичного аналізатора

Лабораторная работа

Информатика, кибернетика и программирование

Граматика створена під впливом мов Pascal та C , зокрема аналогічно першій програма починається з ключового слова program, для початку оголошення використовується слово var. Від мови С було перейнято дужки, що позначають початок і кінець програми, ключове слово main, конструкції умови, циклу та присвоєння.

Украинкский

2013-10-29

370 KB

9 чел.

Міністерство освіти і науки, молоді та спорту України

НТУУ «КПІ»

Кафедра АПЕПС

Лабораторна робота №1

з курсу Лінгвістичне забезпечення САПР

На тему: «Побудова лексичного аналізатора»

Виконав

студент 3-го курсу ТЕФ

групи ТР-91

Лисий А.

Перевірила

Третяк В.А.

Київ – 2011


Вступ

Завданням лексичного аналізатора є розбивання вхідного коду програми на окремі частини: роздільники, зарезервовані слова, ідентифікатори та константи, побудова вихідних таблиць лексем, констант та ідентифікаторів.

Для даного випадку Л.А. має також перевіряти можливі помилки при написанні прорами такі як дублювання в оголошенні ідентифікаторів та використання необ’явлених ідентифікаторів.

Результати роботи Л.А. подаються у вигляді файлів.


Виконання лабораторної роботи

Граматика заданої мови програмування

  1.  <програма>::= program <id>; var <спис. огол> main{<спис. опер>}
  2.  <спис. огол>::=<огол.>; <спис. огол>|<огол.>;
  3.  <огол.>::=<тип>:<спис. id>;
  4.  <тип>::=double | int 
  5.  <спис. опер>::=<оператор>;|<оператор>;<спис. опер>
  6.  <оператор>::=<цикл> | <ум. оп> | <ввід> | <вивід> | <присвоєння>
  7.  <цикл>::=for(<id>=<вираз>;<лог. вираз>;<id>=<вираз>)<оператор>
  8.  <ум. оп>::=if (<відношення>) {<спис. опер>}
  9.  <ввід>::=read(<спис. id>)
  10.  <вивід>::=write(<спис. id>)
  11.  <присвоєння>::=<id>=<вираз>
  12.  <вираз>::=<додан.> |<вираз>+<додан.> | <вираз>-<додан.>
  13.  <додан.> ::=<множн.>|<додан.>*<множн.> |<додан.>/<множн.>
  14.  <множн.> ::= <конст> | (<вираз>) | <id>|-<вираз>
  15.  <конст>::=<цбз>|<цбз>.|<цбз>.<цбз>
  16.  <цбз>::=<цифра>|<цбз><цифра>
  17.  <цифра>::= 0 |…| 9
  18.  <спис. id>::=<id>|<спис. id>,<id>
  19.  <id>::=<буква>|<id><буква>|<id><цифра>
  20.  <буква>::=a |…| Z
  21.  <відношення>::=<вираз><знак><вираз>
  22.  <знак>::= > | < | >= | <= | == | !=
  23.  <лог. вираз>::=<лог. множ>|<лог. вираз> && <лог. множ>
  24.  <лог. множ.> ::= <лог. додан.> | <лог. вираз> || <лог. додан.>
  25.  <лог. додан.>::= <лог. од.> | !<лог. од.> | [<лог. вираз>]
  26.  <лог. од.> ::= <відношення> | true | false |

Граматика створена під впливом мов Pascal та C , зокрема аналогічно першій програма починається з ключового слова program, для початку оголошення використовується слово var. Від мови С було перейнято дужки, що позначають початок і кінець програми, ключове слово main, конструкції умови, циклу та присвоєння.

Додатковою функцією лексичного аналізатора є перевірка таких помилок як дублювання операторів при оголошенні та використання неоголошеного оператора.

Таблиця лексем

Лексема ID

program  0    

var         1    

double    2    

int     3    

main   4    

{       5    

}       6    

read    7    

write          8    

for     9    

if      10   

,       11   

:       12   

;       13   

+       14   

-       15   

*       16

/       17   

Лексема ID

=       18   

(       19   

)       20   

>       21   

<       22   

>=      23   

<=      24   

==      25   

!=      26   

&&      27   

||        28   

!       29

[ 30

] 31  

true    32   

false          33

id 34

con 35

Нижче наведено приклади роботи програми

1.  Якщо в початковому коді були допущені такі помилки як дублювання ідентифікаторів при оголошенні або використання неоголошеного ідентифікатора (рисунок 1, наявні обидві вищевказані помилки), тоді в файл ErrorLog.txt будуть занесені відповідні записи(рисунок 3). На виході програми формується файл LexTable.txt з таблицею лексем (рисунок 2). Лексеми, в яких було допущено помилку не вносяться до таблиці, при цьому розбір коду продовжується. Крім вищевказаних файлів додатково створюється таблиця констант та ідентифікаторів (рисунок 3). Лексеми з помилками в них також не заносяться.

Рисунок 1-Текст програми.

Рисунок 2-Вихідна таблица лексем.

Рисунок 3-Таблиці индентификаторів, констант і лог помилок.

2. При відсутності в початковому коді помилок (рисунок 4) в файл ErrorLog.txt не буде занесено жодного запису (рисунок 6), при цьому таблиця лексем в файлі LexTable.txt (рисунок 5) вміщуватиме всі без виключення знайдені лексеми. Таблиці констант та ідентифікаторів також не буде відсутніх елементів (рисунок 6), на відміну від випадку з помилками (рисунок 3).

Рисунок 4-Код програми.

Рисунок 5-Вихідна таблиця лексем.

Рисунок 6-Таблиці идентификаторів, констант і лог помилок.


Список використаних джерел

  1.  Сліпченко, В.Г., Медведєва В.М. Основи побудови компіляторів: Навч. посібник / В.Г. Сліпченко, В.М. Медведєва. – К.: ІЗМН, 2004. – 104с.
  2.  Ахо, А. Компиляторы: принципы, технологии и инструменты. : Пер. с англ / А. Ахо, Р. Сети, Дж. Ульман. – М. : Издательский дом «Вильямс», 2003. – 768с. : ил. – Парал. тит. англ.
  3.  Конспект лекцій з курсу лінгвістичного забезпечення САПР


 

А также другие работы, которые могут Вас заинтересовать

35281. Тема: Розробка програм з використанням класів Ціль роботи: вивчити синтаксичні конструкції для оголошення. 66.5 KB
  Відповідно до індивідуального завдання розробити структуру класу зробити визначення функційчленів класу clss розробити алгоритм використання об'єктів і покажчиків на об'єкти класу для доступу до даних і функцій членам. Перевірити можливість доступу до членів класу в розділах privte public protected.Дайте визначення поняттям: об'єкт клас данчлени класу функціїчлени класу.У чому відмінність між класом і об'єктом класу 3.
35282. Тема: Використання конструкторів і деструкторів Ціль роботи: вивчити і навчитися використовувати механізм. 64.5 KB
  Лабораторна робота № 31 Тема: Використання конструкторів і деструкторів Ціль роботи: вивчити і навчитися використовувати механізм роботи з конструкторами і деструкторами. Відповідно до індивідуального завдання для попередньої лабораторної роботи розробити конструктори і деструктор для заданого класу. Здійснити ініціалізацію об'єктів класу різними конструкторами. 7 Базовий клас Похідний клас Похідний клас транспортний засіб літак дельтоплан Контрольні запитання Навіщо використовуються конструктори і деструктори Яке ім'я має конструктор і...
35283. Використання спадкування для створення ієрархії класів 71.5 KB
  Відповідно до індивідуального завдання розробити структуру базового класу і спадкоємців не менш 3х похідних класів на двох рівнях ієрархії.Скільки базових класів може бути в похідного класу 6.Чи можна задавати специфікатори для базових класів при спадкуванні оголошення довільного класу 8.Як змінюється доступ до елементів базового класу при спадкуванні з різними специфікаторами доступу: з розділів класу із програми з інших класів 9.
35284. Використання віртуальних і покажчиків для роботи з обєктами класів 60.5 KB
  Відповідно до індивідуального завдання на базі лабораторної роботи №22 розробити алгоритм роботи з обєктами базових і похідних класів з використанням покажчиків на базові і похідні класи. 3.При необхідності довести ієрархію класів до 3-4-х рівнів.
35285. Тема. Побудова багаточлена Лагранжа. 43 KB
  Побудова багаточлена Лагранжа. Навчитися будувати багаточлен Лагранжа скласти програму. Індивідуальне завдання Знайти наближене значення функції при даному значенні аргументу за допомогою інтерполяційного багаточлена Лагранжа. Що називають вузлами інтерполяції і як вони Яка ідея методу інтерполяції за допомогою багаточлена Лагранжа.
35286. Анализ медико-демографических показателей и оценка оказания медицинской помощи населению Тарусского Н-ской области за 2009 год 359 KB
  Население Тарусского района Н-ской области в данном году 87500, в том числе женщин в возрасте 15-49 лет – 25300. В райцентре в городе Таруссе проживает 36500. Остальное население в районе – сельское.
35287. Тема. Формули Нютона через кінцеві різниці Мета. 65.5 KB
  Формули Нютона через кінцеві різниці Мета. Навчитися обчислити значення функції при даному значенні аргумента використовуючи формули Нютона через кінцеві різниці. Індивідуальна робота x y 0115 865729 0120 829329 0125 795829 0130 764893 0135 736235 0140 709613 0145 684815 0150 661659 0155 639986 0160 619658 0165 600551 0170 582558 0175 565583 0180 549543 № варіанта х1 х2 16 01168 01745 Контрольні питання: Дати визначення кінцевої різниці 1го кго порядку Поставте задачу інтерполяції функції Запишіть...
35288. Организационно-экономическая характеристика организации 720 KB
  Основная цель анализа – выявление и оценка тенденций развития финансовых процессов на предприятии. Менеджеру эта информация необходима для разработки адекватных управленческих решений по снижению риска и повышению доходности финансово-экономической
35289. Собственные мышцы гортани, их иннервация, значение для голосообразования 15.25 KB
  Грудинощитовидная начинается от задней поверхности рукоятки гортани, присоединяется к передней поверхности щитовидного хряща. (Опускает гортань вниз)...