Основы объектно-ориентированного программирования на языке 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