Реферати українською » Информатика, программирование » Конвертер програми з підмножини мови Сі в Паскаль з допомогою LL(1) методу синтаксичного аналізу


Реферат Конвертер програми з підмножини мови Сі в Паскаль з допомогою LL(1) методу синтаксичного аналізу

Страница 1 из 2 | Следующая страница

  (висловлювання)"

Курсова робота

Виконали студенти групи ИАС-00 Мардасова У. А. Шалудько У. А.

Кемеровский Державний Університет, Факультет Информационных Технологій

Новокузнецк, 2002 р.

Запровадження

При знайомство з мовою СІ, особливо - по вивчення Паскаля і Бейсика, занурення у деталі його образотворчих коштів може затушувати важливу думку: хоча СІ написати будь-яку прикладну програму, він спочатку при цьому не призначений. СІ є наслідком еволюційного розвитку мов створення системних програмних засобів. Якщо прикладному програмуванні еволюція йшла від Фортрана до Алголу, Коболу, Паскалю тощо., то системному - від Ассемблеров, прив'язаних до архітектури ЕОМ, до СІ, котрій створено трансляторы, які його хоч й незалежною від архітектури, але з що основного призначення.

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

Зрозуміло, сказане вище годі було абсолютизувати. Програмісти, які звикли СІ, успішно пишуть у ньому програми різних класів. Ідеться як СІ - згадайте про експертних системах, написаних на Бейсике. У той самий час, при масовому програмуванні дотримуватися "розподіл праці" між мовами видається більш природним.

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

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

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

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

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

Застосування мови Паскаль значно підняло "планку" надёжности розроблюваних програм рахунок вимог Паскаля до опису які у програмі змінних, перевірки узгодженості програми при компіляції без його виконання.

Використання в Паскале і гнучких структур управління: розгалужень, циклів.

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

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

Нині є велика кількість систем програмування на СІ до різних типів комп'ютерів. Розроблено багато бібліотек модулів, інструментальних коштів розробки та налагодження, які полегшують створення нових програм. Програми на СІ мають високу мобільність, без жодних змін вони переносяться, транслюються і виконуються машинами різних типів.

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

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

Мова Паскаль передбачає використання принципів замовчувань і скорочень, вимагає суворого дотримання відповідності типів даних, у ньому жорстко регламентовані структура і важливе місце описи програмних об'єктів.

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

Обмежене використання типів даних, може підтримуються лише арифметичні типи даних.

Вложенность блоків, у яких використовуються однойменні об'єкти, має перевищувати двох рівнів.

Процедурні блоки нічого не винні бути всередині BEGIN-блоков, вкладеність процедурних блоків не обмежується.

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

Обмежене використання змішання різних типів даних.

Висловлювання в Паскале

Конструкція мови, задающая порядок виконання дії над елементами даних, називається вираженням. Вислів складається з операндов (operand - елемент даних, що у операції), - величин і висловів, з яких виробляється операція (константи і які змінюються всіх типів, звернення функцій); круглих скобок і знаків операцій. Операції визначають дії, що треба виконати над операндами. Наприклад, у натуральному вираженні (X+Y-10) X, Y і десяти - операнды; а "+" і "-" - знаки операцій складання і вирахування.

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

Операції у мові Паскаль діляться на арифметичні, відносини, логічні (булевские), операцію @, строковые та інших. Висловлювання відповідно називаються арифметичними, відносини, булевскими, строковыми тощо. залежно від цього, якого типу операнды та операції у яких використовуються.

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

Операції може бути унарными і бінарними. У першому випадку операція належить одного операнду і завжди записується проти нього, у другому - операція висловлює ставлення між двома операндами і записується з-поміж них.

Наприклад, -А - унарная операція, Х+У - бінарна.

Арифметические висловлювання й операції.

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

Арифметическое вираз породжує ціле, або дійсне (речовинне) значення. Найбільш простими формами арифметичних висловів є:

Ціла чи справжня константа без знака;

Ціла чи справжня змінна;

Елемент масиву цілого чи дійсного типу;

Функція, приймаюча ціле, або дійсне значення.

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

Арифметические операції виконують арифметичні дії висловлюваннях над значеннями операндов цілочислових і речовинних типів. Арифметические операції мови Паскаль представлені у таблице1.

Арифметические операції

Операція Дія Типи операндов Тип результату
Бинарные

+

-

*

/

DIV

MOD

AND

SHL

SHR

OR

XOR

Сложение

Віднімання

Множення

Розподіл

Целочисленное розподіл

Залишок від розподілу

Арифметическое І

Зрушення вліво

Зрушення вправо

Арифметическое АБО

Исключающая диз'юнкція

Цілий

Вещественный

Цілий

Вещественный

Цілий

Вещественный

Цілий

Вещественный

Цілий

Цілий

Цілий

Цілий

Цілий

Цілий

Цілий

Цілий

Вещественный

Цілий

Вещественный

Цілий

Вещественный

Вещественный

Вещественный

Цілий

Цілий

Цілий

Цілий

Цілий

Цілий

Цілий

Унарные

+

-

NOT

Збереження знака

Заперечення знака

Арифметическое заперечення

Цілий

Вещественный

Цілий

Вещественный

Цілий

Цілий

Вещественный

Цілий

Вещественный

Цілий

Висловлювання та постійні операції відносини.

Выражением відносини називається словосполучення мови, у якому два висловлювання пов'язані знаком операції відносини. Вислів відносини визначає істинність чи неправдивість результату. Операції відносини виконують порівняння двох операндов визначають, істинно значення висловлювання чи брехливо.

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

Сравниваемые величини можуть належати до будь-якого скалярному чи перечисляемому типу даних. Результат має булевский тип та приймає з двох значень: True (істина) чи False (брехня).

Операції відносини.

Операція Назва Вислів Результат

=

<>

>

<

>=

<=

in

Так само

Не одно

Більше

Менше

Більше або дорівнює

Менше або дорівнює

Належність

A=B

A<>B

A>B

A<B

A>=B

A<=B

A in M

True, якщо А одно У

True, якщо А одно У

True, якщо А більше У

True, якщо А менше У

True, якщо А більше або одно У

True, якщо А менше, або одно У

True, якщо А перебуває у списку М

Логические висловлювання й операції.

Результатом виконання логічного (булевского) є логічне значення True чи False. Операндами є дані лише булевского типу.

Найпростішими видами логічних висловів є такі:

Логічний константа;

Логічний змінна;

Елемент масиву логічного типу;

Логічний функція;

Вислів відносини.

Інші логічні висловлювання будуються з перелічених вище шляхом застосування логічних операцій та круглих скобок. Список логічних операцій приведено у таблиці 3.

Логические операції.

Операція Дія Вислів А У Результат

Not

And

Or

xor

Логічне заперечення

Логічне І

Логічне АБО

Исключающее АБО

not A

A and B

A or B

A xor B

True

False

True

True

False

False

True

True

False

False

True

True

False

False

True

False

True

False

True

False

True

False

True

False

True

False

False

True

True

False

False

False

True

True

True

False

False

True

True

False

Операція @.

З допомогою операції @ можна створити покажчик на зміну. У таблиці 4 показані операнд і типи результату.

Операція створення покажчика.

Операція Дія Тип операнда Тип результату
@ Одержання покажчика Посилання на зміну, процедуру чи ідентифікатор функції Покажчик (сумісний з nil)

Операція @ є унарной. Як операнда можна використовувати посилання зміну, процедуру чи ідентифікатор функції. По виконанні операнду повертається відповідний покажчик, тип якого є так само, як тип покажчика nil, і, отже, може бути привласнити кожному покажчику перемінної.

Висловлювання в СІ.

Конструкції, які включають константи (литералы), перемінні, знаки операцій, дужки керувати порядком операцій, звернення функцій, називають висловлюваннями.

Якщо висловлюваннях зустрічаються операнды різних типів, всі вони перетворюються до спільного типу відповідно до певними правилами:

Змінні типу char інтерпретуються як цілі без знака (unsigned);

Змінні типу short автоматично перетворюються на int; якщо з операндов має тип unsigned, то інший (інші) також перетвориться до типу unsigned і результати має тип unsigned;

Якщо хтось із операндов має тип int, то інший (інші) також перетвориться до типу int і результати має тип int;

Якщо хтось із операндов має тип char, то інший (інші) також перетвориться до типу char і результати має тип char;

Під час операції присвоювання значення правій частині перетворюються до типу лівої частини, що й стає типом результату;

У процесі перетворення int в char зайві 8 біт просто відкидаються.

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

Наприклад: z=(int)x+(int)y;

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

У мові СІ присвоювання є також вираженням, і значенням такого є величина, яка присвоюється.

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

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

Висловлювання зі знаками операцій можуть брати участь у висловлюваннях як операнды. Висловлювання зі знаками операцій може бути унарными (з однією операндом), бінарними (з цими двома операндами) і тернарными (із трьома операндами).

Унарное вираз складається з операнда і попередньої йому знаку унарной операції, і має наступний формат:

знак-унарной-операции операнд

Бинарное висловлювання і двох операндов, розділених знаком бінарною операції:

операнд1 знак-бинарной-операции операнд2

Тернарное вираз складається з трьох операндов, розділених знаками тернарной операції (?) і (:), і має формат:

операнд1 ? операнд2 : операнд3

За кількістю операндов, що у операції, операції також поділяються на унарные, бінарні і тернарные.

У мові Сі є такі унарные операції:

-арифметичне заперечення (заперечення і доповнення);

~ побітове логічне заперечення (доповнення);

! логічне заперечення;

& обчислення адреси;

+ унарный плюс;

++ збільшення (приріст);

--зменшення (зменшення);

sizeof розмір .

Унарные операції виконуються справа-наліво.

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

На відміну від унарных, бінарні операції, список яких приведено у табл.7, виконуються зліва-направо.

Таблиця 7

Знак операції Операція Група операцій
* Множення Мультипликативные
/ Розподіл
% Залишок від розподілу
+ Сложение Аддитивные
- Віднімання
<< Зрушення вліво Операції зсуву
>> Зрушення вправо
< Менше Операції відносини
<= Менше або дорівнює
>= Більше або
Страница 1 из 2 | Следующая страница

Схожі реферати:

Навігація