5. Изрази
33
5. Изрази
Изразът, най-общо казано, е правило за пресмятане на стойност на базата на
своите компоненти, наречени операнди. Действията, прилагани над тези компоненти, са
операциите. Типът на получения резултат зависи от типа на операндите и от операциите,
изграждащи израза. Този тип е еднозначно определен и известен още по време на
компилация.
Expression =
(SimpleExpression [relationOp
 SimpleExpression]) |
ExpTypeCast.
SimpleExpression =
['+' | '-'] Term {AdditiveOp Term}.
Term =
Factor {MultiplicativeOp Factor}.
Factor =
Constant       |
VariableRef    |
SetConstructor |
FunctionCall   |
'not' Factor   |
'(' Expression ')'.
5.1. Операнди
Операндите могат да бъдат константи, променливи, обръщения към функции и
конструктори на множества. Обръщението към функция
FunctionCall =
QualIdent [ ActualParamList ].
може да бъде както към стандартна функция, така и към функция, дефинирана от
потребителя. Функциите със странични ефекти са нежелателни, тъй като операндите могат
да бъдат пресметнати в друг, различен от написания, ред.
Използването на променливи, които не са получили стойност до началото на
пресмятането на израза, е грешка. Ако тази грешка не довежда до други грешки, то тя
не може да бъде установена нито по време на компилация, нито по време на
изпълнение. Такава грешка най-често довежда до неопределена стойност на резултата.
При пресмятането на аритметични изрази е възможно да възникне и един друг
вид грешка, която си заслужава да отбележим. Става въпрос за препълването. То
възниква, когато резултатът от аритметична операция излиза извън диапазона на
допустимите за него стойности. Когато резултатният тип е целочислен, такава грешка
не винаги може да бъде установена по време на изпълнение.
5.2. Операции
Операциите в Pascal са три типа: мултипликативни, адитивни и операции за
отношения.
relationOp =
'=' | '<>' | '<' | '<=' | '>' | '>=' | 'in'.
AdditiveOp =
'+' | '-' | 'or' | 'xor' | '|'.
MultiplicativeOp =
'*' | '/' | 'div' | 'mod' | 'and' | '&'.
Когато редът на операциите не е явно зададен чрез скоби, техният приоритет е
следния:
<<  <  GO  >  >>

Вернуться к началу сайта