ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

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

     

    Інформатика, програмування

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

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

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

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

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

    Введення

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Вирази в Паскалі

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

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

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

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

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

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

    Арифметичні вираження та операції.

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

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

    Ціла або дійсна константа без знака;

    Ціла або дійсна мінлива;

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

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

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

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

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

    Операція         

    Дія         

    Типи операндів         

    Тип результату             

    Бінарні             

    +   

    -   

    *   

    /   

    DIV   

    MOD   

    AND   

    SHL   

    SHR   

    OR   

    XOR            

    Складання   

    Віднімання   

    Множення   

    Поділ   

    Цілочисельне   поділ   

    Залишок від   ділення   

    Арифметичне І   

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

    Зсув вправо   

    Арифметичний   АБО   

    що виключає   диз'юнкція            

    Цілий   

    Речовий   

    Цілий   

    Речовий   

    Цілий   

    Речовий   

    Цілий   

    Речовий   

    Цілий   

    Цілий   

    Цілий   

    Цілий   

    Цілий   

    Цілий   

    Цілий         

    Цілий   

    Речовий   

    Цілий   

    Речовий   

    Цілий   

    Речовий   

    Речовий   

    Речовий   

    Цілий   

    Цілий   

    Цілий   

    Цілий   

    Цілий   

    Цілий   

    Цілий             

    Унарні             

    +   

    -   

    NOT         

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

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

    Арифметичний   заперечення         

    Цілий   

    Речовий   

    Цілий   

    Речовий   

    Цілий         

    Цілий   

    Речовий   

    Цілий   

    Речовий   

    Цілий     

    Вирази та операції відношення.

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

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

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

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

    Операція         

    Назва         

    Вираз         

    Результат             

    =   

    <>   

    >   

    <   

    > =   

    <=   

    in         

    Так само   

    Не одно   

    Більше   

    Менше   

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

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

    Належність         

    A = B   

    A <> B   

    A> B   

    A   

    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. Обидва операнда є покажчиками на один і той же тип.

    3. Перший операнд є покажчиком, а другий - цілим.

    Відзначимо, що операції додавання і віднімання над адресами в одиницях, відмінних від довжини типу, можуть призвести до непередбачуваних результатів.

    Логічні операції

    До логічним операцій належать операція логічного І (& &) і операція логічного АБО (||). Операнди логічних операцій можуть бути цілого типу, плаваючого типу або типу покажчика, при цьому в кожній операції можуть брати участь операнди різних типів.

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

    Логіка операції не викликають стандартних арифметичних перетворень. Вони оцінюють кожний операнд з точки зору його еквівалентності нулю. Результатом логічної операції є 0 або 1, тип результату int.

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

    Операція логічного АБО (| |) виконує над операндами операцію включає АБО. Вона виробляє значення 0, якщо обидва операнда мають значення 0, якщо який-небудь з операндів має нульове значення, то результат операції дорівнює 1. Якщо перша операнд має нульове значення, то другий операнд не обчислюється.

    Операція послідовного обчислення

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

    Умовна операція

    В мовою СІ є одна тернарная операція - умовна операція, яка має наступний формат:

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

    Операнд-1 повинен бути цілого або плаваючого типу або бути дороговказом. Він оцінюється з точки зору його еквівалентності 0. Якщо операнд-1 не дорівнює 0, то обчислюється операнд-2 і його значення є результатом операції. Якщо операнд-1 дорівнює 0, то обчислюється операнд-3 і його значення є результатом операції. Слід відзначити, що обчислюється або операнд-2, або операнд-3, але не обидва. Тип результату залежить від типів операнда-2 і операнда-3, наступним чином.

    1. Якщо операнд-2 або операнд-3 має цілий або плаваючий тип (відзначимо, що їх типи можуть відрізнятися), то виконуються звичайні арифметичні перетворення. Типом результату є тип операнда після перетворення.

    2. Якщо операнд-2 і операнд-3 мають один і той же тип структури, об'єднання або покажчика, то тип результату буде тим же самим типом структури, об'єднання або покажчика.

    3. Якщо обидва операнда мають тип void, то результат має тип void.

    4. Якщо один операнд є вказівником на об'єкт будь-якого типу, а інший операнд є покажчиком на vold, то покажчик на об'єкт перетвориться до вказівником на vold, який і буде типом результату.

    Якщо один з операндів є покажчиком, а інший константним виразом з значенням 0, то типом результату буде тип покажчика.

    Операції збільшення та зменшення

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

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

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

    Побудова керуючих таблиць

    Визначимо вираження у вигляді БНФ для мови СС + + і Turbo Pascal 7.0.

    СС ++:

    В:: = + + i | - i | i + + | i - | B & B | B/B | B% B | B + B | BB | B B | B> = B | B <= B | B! = B | B == B | B & & B | B | | | (k) B | B? B: B | i = B | i *= B | i-= B | I + = B | i/= B | i% = B | i | i (S) | (B)

    S:: = B | B, S

    Де В - вираз;

    S -- список виразів;

    i -- індіфікатор.

    Turbo Pascal 7.0.

    В:: = П | П = П | П <П | П> П | П <> П | П> = П | П <= П

    П:: = + C |-C | П + C | П-C | П or C

    C:: = M | C * M | C/M | C div M | C mod M | C and M

    M:: = i | i (S) | (B)

    S:: = B | B, S

    Де В - вираз;

    S -- список виразів;

    П -- простий вислів;

    С -- доданок;

    М -- множник:

    i -- індіфікатор.

    N

    Тепер наведемо дані БНФ до КС-граматики: G =

    СС + + Turbo Pascal 7.0

    B

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status