Основы объектно-ориентированного программирования на языке C# book | Page 183

8.5 Комплексна вправа до роздiлу 7 18. Розробити просту мову програмування, яка надає програмiсту можливiсть виконання присвоєння цiлочисельних констант змiн- ним, порiвняння змiнних мiж собою (<, >), iнкремент змiнноı̈, декремент змiнноı̈, послiдовне виконання кiлькох присвоєнь, умовний оператор, та циклiчний оператор, вивiд значення змiн- ноı̈ на екран. Написати iнтерпретатор розробленоı̈ мови. Син- таксис мови визначити на власний розсуд. Наприклад, можна використати синтаксис такого вигляду (вважаємо, що синта- ксис мови вимагає, щоб кожна iнструкцiя мови записувалась на окремому рядку i кiлькiсть прогалин на початку рядка вiдпо- вiдала рiвню вкладеностi iнструкцiı̈): x = 7 y = 0 z = 0 a = 5 while x < a x++ z-- if x > z y = 1 endif endwhile print y 8.5 Комплексна вправа до роздiлу 7 Дана консольна програма на C# (див. нижче), яка дозволяє обчи- слювати значення арифметичних виразiв, що можуть включати цiлi числа, унарну операцiю мiнус ( - ), бiнарнi операцiı̈ додавання ( + ), вiд- нiмання ( - ), множення ( * ), дiлення ( / ), та круглi дужки. Наприклад, якщо у якостi вхiдних даних програми ввести 1 + (2*3 - 10/2) , при- грама виводить 2 в якостi результату. Операцiя дiлення розумiється як цiла частина вiд дiлення двох цiлих чисел. Прогалини у виразi мiж числами, дужками та знаками операцiй iгноруються. Завдання: 1) Ввести, скомпiлювати за запустити програму на комп’ютерi. Проаналiзувати вихiдний код програми. Визначити призначе- ння кожного класу, поля, та методу. Задокументувати кожний клас та метод. Визначити, чи є випаки, коли програма невiрно обчислює значення вхiдного виразу. Якщо так, запропонувати спосiб модифiкацiı̈ коду програми для усунення таких випадкiв. 2) Додати можливiсть обчислення арифметичних виразiв над дiй- сними числами, наприклад, (1.0 + 2.5) * 3 . 183