- •Описати омновні принципи класифікації мов програмуванняю
- •Що таке мова програмування. Описати універсальні й спеціалізовані мови.
- •Формальні мови. Основні поняття і визначення.
- •Формальне визначення граматики g(V). Що таке продукція? Опишіть поняття термінального і не термінального символу.
- •Формальне визначення мови l(g). Види мов.
- •6. Що таке граматика ? Дайте визначення і наведіть приклади.
- •8. Класифікація граматик і мов за Хомським. Співвідношення між типами граматик.
- •9. Які калси граматик існують ? Які граматики відносяться до класу регулярних граматик ?
- •10.Що таке ланцюжки виводу та сентенціальна форма ? Опишіть проблеми однозначності і еквівалентності граматик.
- •11 (8). Опишіть способи представлення граматики мов. Що таке синтаксичні діаграми ?
- •12. Дерево синтаксичного розбору. Перехід від дерева до правил формальної граматики.
- •13. Як виглядає опис граматики у формі Бєкуса-Наура.
- •14. Дайте визначення ланцюжка, мови. Що таке синтаксис і семантика мови ?
- •15 (11). Опишіть способи представлення граматики мов. Що таке синтаксичні діаграми
- •16. Перетворення граматик.
- •17. Що таке розпізнавач. У чому полягає задачі розбору ?
- •18. Формальне визначення автомата.
- •19. Що таке скінченний автомат? Дайте визначення детермінованого й не детермінованого скінчених автоматів.
- •20. Скінченний автомат. Описати характеристики скінченного автомата.
- •21. Описати зв’язок граматики із скінченним автоматом.
- •22. Визначте структуру скінченного автомата і функції його елементів .
- •23. Опишіть способи завдання функцій переходів са.
- •24. Опишіть алгоритм побудови дса по нса
- •25. Регулярні граматики. Способи завдання регулярних мов.
- •26. Скінченні автомати. Регулярні граматики. Регулярні множини.
- •27. Побудова са на основі ліволінійної граматики, видимості ланцюжка.
- •28 (25). Властивості регулярних мов
- •29. Описати основні поняття автомата з магазинною пам’ятю, його структуру і характеристики.
- •30. Дайте визначення контекстно-вільної граматики, виводимості ланцюжка, безпосередньої виводимості, довжини виводу.
- •31 (30). Описати основні компоненти контекстно-вільних граматик.
- •32. Перетворення контекстно вільних граматик.
- •33. Приведення контекстно-вільних граматик.
- •34. Опишіть принципи побудови лексичних аналізаторів.
- •43. Опишіть переваги і недоліки таблиць ідентифікаторів за допомогою хеш-функцій. Що таке колізія? Чому вона відбувається?
- •44. Опишіть найпростіші методи побудови таблиць ідентифікаторів.
- •49. Опишіть клас граматики, який використовується на етапі створення синтаксичного аналізатора.
- •50. Опишіть lr(k)-граматики.
- •51. Опишіть ll(k)-граматики.
- •52. Транслятори, компілятори та інтерпретатори – описати загальну схему роботи.
- •53. З яких процесів складається компіляція? Опишіть загальну структуру компілятора.
- •54. Що таке трансляція, компіляція, транслятор, компілятор ?
- •55. Опишіть загальну схему роботи компілятора.
- •57. Семантичний аналіз та підготовка до генерації коду.
- •58. Що таке генерація коду? Опишіть методи генерації коду.
- •59. Способи внутрішнього представлення програми.
- •60. Що таке оптимізація коду. Опишіть загальні методи оптимізації.
53. З яких процесів складається компіляція? Опишіть загальну структуру компілятора.
Аналіз (parsing) – розбиття початкової програми на складові частини та створення проміжного представлення.
Синтез – побудова цільової програми з проміжного представлення.
Загальна структура компілятора багато в чому залежить від його фазової структури і структури синтаксичного аналізатора відображає властивості вихідної мови. Звичайно при проектуванні компілятора керуються такими вимогами: 1) ефективна компіляція; 2) мінімальний розмір компілятора; 3) мінімальна довжина цільового коду; 4) створення ефективного цільового коду; 5) мобільність; 6) простота використання; 7) практичність.
54. Що таке трансляція, компіляція, транслятор, компілятор ?
Трансляція - перетворення програми, яка подана однією мовою програмування, в еквівалентну програму іншою мовою.
Компіляція - трансляція вихідного коду програми в об'єктний код компілятора.
Транслятор - це програма, що переводить вхідну програму на вихідній (вхідній) мові в еквівалентну їй вихідну програму на результуючій (вихідній) мові.
Компілятор - це транслятор, що здійснює переклад вихідної програми в еквівалентну їй обєктну програму мовою машинних команд.
55. Опишіть загальну схему роботи компілятора.
Процес послідовного читання компілятором даних із зовнішньої пам'яті, їх обробки і приміщення результатів в зовнішню пам'ять, називається проходом компілятора. За кількістю проходів виділяють одно-, двох-, трьох-і багатопрохідні компілятори. У даному посібнику пропонується схема розробки трехпроходного компілятора, в якому перший прохід - лексичний аналіз, другий - синтаксичний, семантичний аналіз і генерація внутрішнього представлення програми, третій - інтерпретація програми.
56 (52-53). Архітектура та властивості типового компілятора. Описати функції етапів компілятора.
57. Семантичний аналіз та підготовка до генерації коду.
Семантичний аналіз перевіряє правильність тексту вхідної мови з точки зору семантики мови. В різних компіляторах семантичний аналіз може входити до семантичного розбору. Підгтовка до генерації коду це фаза на якій компілятором виконуються попередні дії, безпосередньо зв’язані з синтезом тексту результуючої програми.
58. Що таке генерація коду? Опишіть методи генерації коду.
Генерація коду зв’язана з породженням команд, що складають речення вихідної мови. Крім породження тексту вихідної програми, генерація включає в себе ряд специфічних, відносно незалежних підзадач: розподіл пам'яті (зокрема, розподіл регістрів), вибір команд, генерацію об'єктного (або завантажувального) модуля. Звичайно, незалежність цих підзадач відносна: наприклад, при виборі команд не можна не враховувати схему розподілу пам'яті, і, навпаки, схема розподілу пам'яті (регістрів, зокрема) веде до генерації тієї чи іншої послідовності команд.
59. Способи внутрішнього представлення програми.
Усі внутрішні представлення програми звичайно містять у собі дві принципово різні речі оператори й операнди. Розходження між формами внутрішнього представлення полягають лише в тому, як оператори й операнди зєднуються між собою. Також оператори й операнди повинні відрізнятися один від іншого, якщо вони зустрічаються в будь-якому порядку. За розрізнення операндів і операторів, як уже було сказано вище, відповідає розроблювач компілятора, що керується семантикою вхідної мови.
Відомі наступні форми внутрішнього представлення програм: звязані облікові структури, що представляють синтаксичні дерева; багатоадресний код з явно іменованим результатом (тетради); багатоадресний код з неявно іменованим результатом (тріади); обернений (постфиксна) польський запис операцій; асемблерний код або машинні команди.
Багатоадресний код з явно іменованим результатом (тетради)
Тетради являють собою запис операцій у формі з чотирьох складових: операції, двох операндів і результату операції. Наприклад, тетради можуть виглядати так: ).
Тетради являють собою лінійну послідовність команд. При обчисленні виразу, записаного у формі тетрад, вони обчислюються одна за іншою послідовно. Кожна тетрада в послідовності обчислюється так: операція, задана тетрадою, виконується над операндами і результат її виконання міститься в змінній, заданій результатом тетради.
Багатоадресний код з неявно іменованим результатом (тріади)
Тріади являють собою запис у формі трьох складових:
Їх особливістю є те, що один або обидва операнди можуть бути посиланнями на іншу тріаду. Це в тому випадку, якщо в якості операнда даної тріади виступає результат виконання іншої тріади. Тому тріади при записі нумерують послідовно для зручності посилань.
Обернений польський запис
Перевага: ефективний для обчислення математичних виразів.
Недоліки: необхідно використовувати стек, важко робити оптимізацію.
