Хід оцінки результатів роботи

Зміст

 

  стор.
Вступ ...................................................................  
1. Мета курсової роботи.....................................  
2. Хід виконання курсової роботи......................  
3. Вимоги до вмісту пояснювальної записки ...  
4. Завдання на курсову роботу .........................  
5. Хід оцінки результатів роботи ………….……  
6. Список рекомендованої літератури .............  

 


Вступ

 

 


Мета курсової роботи

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

Курсова робота полягає в створенні компілятора із заданої підмножини мови Паскаль з незначними модифікаціями і спрощеннями (повний опис вхідної і вихідної мов даний далі в завданні для кожного варіанту). Результатами курсової роботи є програмна реалізація заданого компілятора і пояснювальна записка, оформлена відповідно до вимог ДСТУ, стандартів Університету і завдання на курсову роботу.

Для програмної реалізації компілятора рекомендується використовувати мову програмування Object Pascal і систему програмування Borland Delphi. Можливо використання інші мови і системи програмування.

Компілятор рекомендується побудувати з наступних складових частин:

1. лексичний аналізатор;

2. синтаксичний аналізатор;

3. оптимізатор;

4. генератор результуючого коду.

Для побудови компілятора рекомендується використовувати методи, освоєні в ході виконання лабораторних робіт по курсу «Системне програмне забезпечення».


Хід виконання курсової роботи

 

Таблиця 1 - Етапи, що рекомендуються, і час виконання курсової роботи.

№ п/п Етап виконання роботи Час виконання (тижні) Результат
1. Отримання завдання    
2. Вибір однієї з 3 форм граматики, запис граматики вхідної мови у вибраній формі граматики. 1 Граматика вхідної мови.
3. Визначення кордону між лексичним і синтаксичним аналізаторами, вибір методу взаємодії між ними. 0.25 Опис лексичного аналізатора.
4. Вибір способу організації таблиці ідентифікаторів 0.25 Опис вибраного способу організації таблиці ідентифікаторів
5. Побудова лексичного аналізатора. 0.5 Граф переходів автомата лексичного аналізатора.
6. Програмна реалізація лексичного аналізатора. 2 Програмний код лексичного аналізатора.
7. Вибір класу КС-грамматик для побудова синтаксичного аналізатора. 0.5 Опис синтаксичного аналізатора, обґрунтування вибору.
8. Програмна реалізація синтаксичного аналізатора. 3.5 Програмний код синтаксичного аналізатора
9. Вибір використовуваних форм внутрішнього представлення програми. 0.5 Опис вибраних форм внутрішнього представлення програми, обґрунтування вибору.
10. Опис використовуваного алгоритму оптимізації. 0.5 Алгоритм роботи оптимізатора.
11. Програмна реалізація оптимізатора. 2 Програмний код оптимізатора
12. Реалізація генератора результуючого коду 2 Програмний код генератора результуючого коду
13. Відладка компілятора в цілому 1 Програмний код розробленого компілятора.
14. Оформлення записки пояснення 1.5 Записка пояснення до курсової роботи.
15. Підготовка курсової роботи до захисту 0.5  
16. Захист курсової роботи    
  Разом 16  

 


Вимоги до вмісту пояснювальної записки

 

Пояснювальна записка до курсової роботи повинна містити наступні розділи:

1. Короткий виклад мети роботи.

2. Завдання (номер варіанту і повний опис свого варіанту).

3. Опис вибраного способу організації таблиці ідентифікаторів з обґрунтуванням зробленого вибору.

4. Опис лексичного аналізатора і вибраного методу його взаємодії з синтаксичним аналізатором.

5. Граф переходів кінцевого автомата лексичного аналізатора.

6. Опис синтаксичного аналізатора.

7. Вибір форм внутрішнього представлення програми, використовуваних в компіляторі з обґрунтуванням зробленого вибору.

8. Інформація про організацію побудованого компілятора, його розбитті на проходи, кількість проходів в компіляторі.

9. Опис використовуваного методу оптимізації.

10. Опис використовуваного методу породження результуючого коду.

11. Висновки по виконаної роботи.

12. Приклад вхідної програми і результуючої програми, побудованої компілятором.

13. Текст програми компілятора.

Приклади вхідної і результуючої програм, а також текст програми компілятора рекомендується оформляти у вигляді додатків до тексту пояснювальної записки.

Як основа побудови синтаксичного аналізатора допускається вибрати будь-який клас КС-граматик. Опис синтаксичного аналізатора має бути повним, містити всі управляючі таблиці і множини, необхідні для побудови алгоритму функціонування аналізатора (розпізнавача).

Допускається для побудови лексичного і/або синтаксичного аналізаторів використовувати автоматизовані методи побудови розпізнавачів (наприклад, на основі програм LEX і YACC). В цьому випадку не потрібно приводити граф переходів кінцевого автомата (для лексичного аналізатора) і опис синтаксичного аналізатора.

У такому варіанті відповідні розділи записки пояснення повинні містити наступну інформацію: обґрунтування вибору програми, використовуваної як засіб автоматизованої побудови розпізнавача, і текст вхідного файлу, створеного для виконання автоматизованої побудови лексичного або синтаксичного аналізатора.


Завдання на курсову роботу

 

Компілятор повинен запускатися командним рядком з декількома вхідними параметрами. Першим і головним вхідним параметром має бути ім'я вхідного файлу, другим параметром має бути ім'я результуючого файлу. Вимоги до решти параметрів командного рядка і управляючих ключів (якщо вони необхідні), встановлюються виконавцем самостійно.

Командний рядок має бути самодостатнім для функціонування компілятора. Окрім інтерфейсу командного рядка можлива наявність додаткового інтерактивного інтерфейсу користувача для компілятора (у тому числі і графічного) по бажанню виконавця роботи.

Вхідна мова компілятора повинна задовольняти наступним вимогам:

· вхідна програма зачинається ключовим словом program і закінчується ключовим словом end;

· вхідна програма може бути розбита на рядки довільним чином, всі пропуски і переходи рядка повинні ігноруватися компілятором;

· текст вхідної програми може містити коментарі будь-якої довжини, які повинні ігноруватися компілятором (вид коментаря заданий у варіанті завдання);

· вхідна програма має бути єдиним модулем, що містить лінійну послідовність операторів, виклики процедур і функцій не передбачаються;

· мають бути передбачені наступні варіанти операторів вхідної програми:

· оператор привласнення виду <змінна>:=<вираз>;

· умовний оператор вигляду if <умова> then <оператор>, або if <умова> then <оператор> else <оператор>;

· складений оператор виду begin . end;

· оператор циклу, передбачений варіантом завдання;

· вирази в операторах можуть містити наступні операції (мінімум):

· арифметичні операції складання (+) і віднімання (-);

· операції порівняння менше (<), більше (>), рівно (=);

· логічні операції «і» (and), «або» (or), «ні» (not);

· додаткові арифметичні операції, передбачені варіантом завдання;

· операндами у виразах можуть виступати ідентифікатори (змінні) і константи (тип допустимих констант вказаний у варіанті завдання);

· всі ідентифікатори, що зустрічаються в вихідній програмі, повинні сприйматися як змінні, що мають тип, заданого у варіанті завдання (попередній опис ідентифікаторів в вихідній програмі не потрібний);

· при необхідності можна враховувати два зумовлені ідентифікатори InpVar і CompileTest, сенс яких буде ясний з опису вихідної мови, що приводиться нижче.

· Обов’язково організувати вивід результатів обчислень на консоль.

Пріоритет операцій виконавець роботи повинен вибрати самостійно (пріоритет операцій враховується в граматиці вхідної мови). Для зміни пріоритету операцій повинні використовуватися круглі дужки.

Повний опис вхідної мови має бути задане в граматиці вхідної мови, яка будується виконавцем на першому етапі роботи. Граматика вхідної мови повинна передбачати будь-які вхідні ланцюжки, що задовольняють викладеним вище вимогам. Допускаються будь-які модифікації вхідної мови по вибору виконавця, якщо вони не виходять за рамки вказаних вище вимог. Допускається розширювати набір дозволених операцій і операторів вхідної мови за умови задоволення заданим мінімальним вимогам, але при цьому не дозволяється використовувати операції і операторів з інших варіантів завдання – всі такі оператори обов'язково повинні трактуватися як помилкові.

Компілятор повинен перевіряти наступні семантичні обмеження вхідної мови:

- не допускається присвоєння значень константам;

- не допускається привласнення значення ідентифікатору InpVar;

- не допускається використовувати ідентифікатор CompileTest інакше, як для привласнення йому значень.

Як вихідна (результуючого) мова повинна використовуватися мова асемблера. процесорів типу Intel 80x86 в модифікації вбудованої мови асемблера компілятора Pasca виробництва фірми Borland.

У загальному вигляді результуюча програма повинна мати наступний вигляд:

Program <Ім’я_програми>; {Ім'я програми вибирається виконавцем самостійно}

Var InpVar: <Тип_данних>; {Тип даних вказаний у варіанті завдання}

Var <Спісок_змінних>: <Тип_даних>;

{Список змінних повинен містити перелік всіх змінних з вихідної програми}

Function CompileTest(InpVar: <Тип_данних>): <Тип_данних>;

{Змінні являються оголошені в тексті вихідної програми}

Begin|

Asm|

{Сюди має бути включений текст результуючої програми, породжений компілятором}

end;

end;

begin

readln(InpVar);

writeln(CompileTest(InpVar));

end.

Всю незмінну частину результуючої програми компілятор повинен породжувати самостійно незалежно від поданої на вхід вихідної програми.

Ім'я результуючої програми виконавець вибирає самостійно. Ідентифікатори InpVar і CompileTest є зумовленими змінними, які використовуються для подачі значень на вхід результуючої програми і отримання результату від неї при тестуванні працездатності результуючої програми.

Тип даних, використовуваний для всіх змінних, задається у варіанті завдання.

Ідентифікатори, що зустрічаються в вихідній програмі, вважати за прості скалярні змінні, що не вимагають виконання перетворення типів. Обмеження на довжину ідентифікаторів і констант у вхідній програмі виконавець вибирає самостійно, але вибрана довжина не має бути менше 32.

У випадку, якщо на вхід компілятора подається вхідна програма, що містить семантичні або синтаксичні помилки, компілятор повинен коректно завершувати своє виконання і видавати повідомлення про знайдену помилку у вхідній програмі з вказівкою рядка, в якому знайдена помилка. По можливості, компілятор повинен вказувати тип знайденої помилки. Компілятор може вказати декілька помилок у вхідній програмі, якщо вони були їм виявлені.

 

Варіанти завдань

 

Таблиця 2 - Варіанти завдань на виконання курсової роботи.

 

№ п/п Тип допусти -мих констант Додаткові арифме -тичні операції Опера -тор циклу вхідної мови Опти-мізація Тип даних Тип комен -таря Граф станів ЛА
1 2 *, / 1 1 Byte 1 1
2 2 >> << 1 1 Byte 2 2
3 2 ++ 1 1 Byte 3 6
4 2 -- 2 1 Byte 4 4
5 8 *, / 2 1 Word 1 5
6 8 >> << 2 1 Word 2 3
7 8 ++ 3 1 Word 3 1
8 8 -- 3 1 Word 4 6
9 16 *, / 3 1 Integer 1 2
10 16 >> << 1 1 Integer 2 3
11 16 ++ 1 1 Integer 3 4
12 16 -- 1 1 Integer 4 5
13 2 *, / 2 1 Byte 1 1
14 2 >> << 2 1 Byte 2 6
15 2 ++ 2 1 Byte 3 2
16 2 -- 3 2 Byte 4 3
17 16 *, / 3 2 Word 4 4
18 16 >> << 3 2 Word 3 5
19 16 ++ 1 2 Word 2 6
20 16 -- 1 2 Word 1 1
21 8 *, / 1 2 Integer 4 3
22 8 >> << 2 2 Integer 3 4
23 8 ++ 2 2 Integer 2 2
24 8 -- 2 2 Integer 1 5
25 2 *, / 3 2 Byte 1 1
26 2 >> << 3 2 Byte 2 2
27 2 -- 3 2 Integer 3 3
28 2 -- 1 2 Integer 4 4
29 8 *, / 2 2 Word 1 5
30 8 >> << 3 2 Word 2 6

 

Типи констант:

2 — двійкові;

8 — вісімдесяткові;

16 — шістнадцяткові.

Додаткові арифметичні операції:

*, / — множення і ділення;

>> << — зсув вправо і вліво (арифметичні або логічні — по вибору);

++ — інкремент (збільшення значення змінної на 1);

-- — декремент (зменшення значення змінної на 1).

Оператор циклу вхідної мови:

1. Цикл з предумовою

2. Цикл з постумовою

3. Цикл з перерахування по заданій змінній

Типи коментарів:

1 – коментар у фігурних дужках: { .}

2 – коментар в круглих дужках з «зірочкою»: (*.*)

3 – коментар за подвійною косою межею до кінця рядка: //.

4 – коментар усередині косої межі з «зірочкою»: /*.*/

Методи оптимізації:

1 – виключення зайвих операцій;

2 – згортка об'єктного коду.

Побудова графу станів кінцевого автомату для лексичного аналізатора:

1 – визначення змінної (тип згідно варіанту)

2 – визначення коментарів (згідно варіанту)

3 – визначення службових слів

4 – визначення констант (згідно варіанту)

5 – визначення ідентифікатора

6 – визначення арифметичних операцій

 


Хід оцінки результатів роботи

 

Виконана курсова робота оцінюється за наступними показниками:

- Вміст пояснювальної записки;

- функціональність побудованого компілятора;

- здатність виконавця відповідати на питання за змістом записки пояснення і по суті роботи.

Текст пояснювальної записки повинен задовольняти вимогам ДСТУ і стандартів Університету. Вміст записки пояснення повинен задовольняти вимогам завдання на виконання курсової роботи.

Функціональність компілятора перевіряється шляхом подачі на його вхід простих контрольних прикладів (у тому числі і прикладів помилкових вхідних програм). Результат виконання порівнюється з підрахованим вручну результатом виконання контрольного прикладу.

Функціональності компілятора насамперед оцінюється по заданих мінімальних вимогах і по працездатності компілятора (відсутність «зависань» і нерегламентованих повідомлень про помилки при будь-яких вхідних даних).

Не допускається реалізовувати функціональність, передбачену іншими варіантами курсової роботи.


Дата добавления: 2020-12-12; просмотров: 57; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!