ПАСКАЛЬ: лексика, вирази, семантика
2.два вирази й знак бінарної операції між ними;
3.вираз із знаком унарної операції перед ним;
4.виклик функції з виразом у дужках.
Ось приклади виразів: ((1)), true and false, 1-(2+3), (1-2)+3, (1+2)<>3, -(5+3), odd(2), ord(odd(15)).
Те значення, до якого застосовується операція, називається її операндом. Операнди позначаються виразами. Найпростішими з них є сталі. Вираз задає застосування операцій до операндів – значень простіших виразів. Послідовність виконання цих операцій утворює процес обчислення значення виразу.
Як бачимо, вираз має подвійний зміст, або семантику: З одного боку, він задає процес обчислення, а з іншого – він має значення. Наприклад, вираз 2*2=4 задає процес, у якому обчислюється добуток 2*2 і порівнюються два цілі значення 4 і 4, в результаті чого одержується значення true.
Таким чином, на питання про те, що таке "2*2=5", математик відповів би, що це неправильна рівність, а програміст – що це позначення обчислень.
Результати операцій у процесі обчислення виразу запам'ятовуються для застосування до них подальших операцій. Останнє з обчислених значень також запам'ятовується для використання в програмі. Проміжні значення запам'ятовуються, як правило, в регістрах процесора, оскільки робота з ними відбувається набагато швидше, ніж робота з оперативною пам'яттю.
Як використовуються вирази? Їх значення можна іменувати, присвоювати змінним, виводити "у зовнішній світ" або використовувати для прийняття рішень про те, що робити далі при виконанні програми. Всі ці незрозумілі слова ми почнемо пояснювати, починаючи з пункту 2.2.5.
Мова Паскаль в основному дотримується угод, що склалися в математиці про порядок застосування операцій у виразах. Це дозволяє не записувати зайві дужки, наприклад, усі розуміють, що 1-2*3 означає те ж саме, що і 1-(2*3). На порядок застосування операцій за відсутності дужок впливає їх старшинство, або пріоритетність. Якщо поруч із позначенням операнда записано знаки двох операцій, то спочатку виконується старша з них, що має більш високий пріоритет. У табл.2.2 всі операції (не тільки над цілими) розбито на чотири групи, розташовані в порядку спадання пріоритету. Операції всередині кожної групи мають однакові пріоритети. Наприклад, вираз 1+(3+2)*2 задає, що після обчислення 3+2, тобто 5, воно множиться на 2, а не додається до 1.
Крім властивостей старшинства, операції мають властивості право- або лівобічного зв'язування. У стандарті мови Паскаль усі двомісні операції мають властивість лівобічного зв'язування: якщо ліворуч і праворуч від позначення операнда записано знаки операцій з однаковим старшинством, то спочатку застосовується записана ліворуч. Наприклад, 1-2*4+3 = (1-2*4)+3, але аж ніяк не 1-(2*4+3).
Застосування операцій, указаних у виразі, можна подати таким чином. Відшукаємо операцію, яка виконується першою, та від позначення її операндів проведемо стрілки вниз, і там запишемо результат. Потім зробимо те саме з операндами наступної операції, потім третьої тощо, поки не одержимо результат обчислення виразу. Приклади подано на рис.2.1.
Тип значення, обчислення якого задає вираз, називається типом виразу.
У системі програмування Турбо Паскаль застосовується так зване "ледаче", або скорочене, обчислення бульових операцій and і or. Спочатку обчислюється їх перший операнд. Якщо у випадку and він є false, то другий операнд не обчислюється, тому що результатом операції все рівно буде false. Аналогічно якщо перший операнд операції or є true, то це й буде результатом, і другий операнд не обчислюється. Наприклад, вираз (2*2=5) and (323345 div 17 = 0) задає обчислення лише 2*2=5, а (2*2=4) or (323345 div 17 = 0) – лише 2*2=4.
Задачі
2.4.* Обчислити значення виразу: