Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗапискаТекстССодержаниемVer1.docx
Скачиваний:
35
Добавлен:
17.03.2016
Размер:
460.55 Кб
Скачать

ЗМІСТ

ВСТУП 5

1.ПОСТАНОВКА ЗАДАЧІ 6

2.ОПИС МЕТОДУ РОЗВ’ЯЗАННЯ ЗАДАЧІ 7

2.1 Граматика мови 7

2.2Приклад програми 7

2.3Структура транслятора 8

2.4Лексичний аналізатор 10

2.5Синтаксичний аналізатор 14

2.6Побудова польського інверсного запису 18

2.6.1 ПОЛІЗ оператора умовного переходу 20

2.6.2 ПОЛІЗ оператору циклу 21

2.6.3 ПОЛІЗ операторів input та output 22

2.6.4 Приклад роботи програми 23

2.6.5 Виконання ПОЛІЗ 23

3. МЕТОДИЧНА РОБОТА КОРИСТУВАЧА З СИСТЕМОЮ 25

ВИСНОВКИ 27

СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 29

ВСТУП

На сьогоднішній день задача побудови мовних процесорів часто постає

в професійній діяльності інженерів – програмістів, а саме: розробка трансляторів з проблемно-орієнтованих мов у системах моделювання, системах автоматизованого проектування, банківських системах та ін., а також розробка компіляторів з традиційних мод програмування у зв’язку з удосконалення архітектури і системи команд ЕОМ, або з метою оптимізації швидкодії чи функціоналу.

Даний курсовий проект представляє собою продукт, розроблений з дотриманням основних принципів програмного забезпечення САПР, завдання якого полягає в забезпеченні зручного написання програм на мові високого рівня , перевірки їх правильності, та виконання з мінімальними витратами часу.

У рамках даної курсової роботи було розроблено граматику мови програмування та транслятор для неї. Програма складається з чотирьох основних частин: лексичний та синтаксичний аналізатор, генератор ПОЛІЗ та інтерпретатор. Така компоновка програми спрощує процес розробки та оптимізації, а також надає можливість для масштабування в майбутньому.

Користувач може використовувати цей проект для створення власних не складних програм, або для вивчення принципів побудови трансляторів.

  1. Постановка задачі

Розробити транслятор для мови програмування, що містить оператори вводу-виводу, оператор присвоєння, оператори циклу і умовного переходу наступного виду:

dowhile <ЛВ>

<список операторів>

enddo

та

if <ЛВ>

<список операторів>

else

<список операторів>

endif

В арифметичному виразі використовуються наступні операції та константи: +, -, *, /, (), константи з фіксованою точкою.

Алгоритм лексичного аналізатора: діаграма станів.

Алгоритм синтаксичного аналізатора: висхідний розбір.

  1. Опис методу розв’язання задачі

2.1 Граматика мови

Граматика заданої мови має наступний вигляд:

<программа> ::= program<им. программы> ˩Var<сп. обьяв.>

begin˩ <сп. операторов>end

<сп. обьяв> ::= <обьяв.> ˩ | <сп. обьяв.> <обьяв.> ˩

<обьяв.>::= <сп. идентификаторов>: <тип>

<сп. идентификаторов>::= <id>|<сп. идентификаторов>,<id>

<тип>::=float

<сп. операторов>::=<оператор> ˩| <сп. операторов>,<оператор>˩

<оператор> ::= <присвоение>|<ввод>|<вывод>|<цикл>|<условный переход>

<присвоение>::=<id>:= <выражение>

<выражение> ::= <терм>|<выражение>+<терм>|<выражение>-<терм>|-<терм>

<терм> ::= <множ.> |<терм>*<множ.>| <терм>/<множ.>

<множитель>::=<идентификатор>|<константа>|(<выражение>)

<ввод>::=input <сп. идентификатров>

<вывод>::=output <сп. идентификаторов>

<цикл>::= dowhile<ЛВ>˩ <сп. операторов>enddo

<условный переход> ::= if<ЛВ>˩ <сп. операторов>else˩ <сп. операторов>endif

<ЛВ> ::= <ЛТ> |<ЛВ> or<ЛТ>

<ЛТ>::= <ЛМ>|<ЛТ> and<ЛМ>

<ЛМ>::= <выражение><знак отн.> <выражение> | [<ЛВ>] | not<ЛМ>

<знак отн.> ::= < | <= | > | >= | == | <>

<id>::=<буква> | <id><буква> | <id><цифра>

<конст> ::= <цбз>| <цбз>.| . <цбз>| <цбз>.<цбз>

<цбз>::= <цифра>|<цбз><цифра>

<буква>::= a|b|c….|z

<цифра>::=0|1|2|3|4|5|6|7|8|9

    1. Приклад програми

Нижче наведений приклад програми написаної на основі граматики приведеної вище:

program translator

var ,a,b,c:float

begin

input ,a,b

c := 13

if a > ( b + 3 ) or a < c

a := a + 3

b := 0

c := c * 3

else

a := 0

b := a + 4

endif

dowhile a > c

a := 3 * ( a + c - 2 )

b := a * 3

c := b / ( c + 3 - a )

enddo

output ,a,b,c

end

    1. Структура транслятора

Транслятор – це програма, яка виконує трансляцію програми.

Трансляція програми – перетворення програми, представленої на одній з мов програмування, в програму на іншій мові, рівносильну першій.

Транслятор складається з трьох основних частин:

  • Лексичний аналізатор;

  • Синтаксичний аналізатор;

  • Генератор машинного коду.

Лексичний аналізатор розбиває текст програми на лексеми – службові слова, імена змінних, константи, знаки операцій.

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

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

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

Схему роботи трьох прохідного транслятора можна зобразити наступним чином (рисунок 2.1):

­­Рисунок 2.1 – Структура трьох прохідного транслятора

Перший прохід – це лексичний аналіз. На вхід лексичного аналізатора подається початковий текст програми. Лексичний аналізатор аналізує послідовності символів та виконує розбиття тексту на лексеми, виконує перевірку належності лексем до службових слів мови, ідентифікаторів, констант чи міток. Також виконує перевірку на наявність об’яв змінних і міток, що використовуються та перевіряє відсутність повторних об’яв. На виході лексичного аналізатора отримуємо вихідну таблицю, що містить лексему (підрядок), рядок, в якому вона була знайдена, її номер в таблиці лексем та індекс (якщо це ідентифікатор, константа або мітка). Також на виході отримаємо таблиці ідентифікаторів, констант та міток.

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

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

Після цього здійснюється інтерпретація отриманого коду, тобто його виконання. Інтерпретатор виконує програму відразу, на відміну від компілятора, який перетворює код програми у машинний код.