Таќырыбы: Программалау тілдерінің семантикалық мінездемелері.
-
Программалау тілі және программа.
-
“Өткізу” және “қабылдау”операторлары. Формальді синтаксисі.
1. Алдыңғы сабақта біз мынандай тезисті алға тартқан болатынбыз: Егер S конструкцияның предикаттар түрлендірушісін білсек онда S конструкциясының семантикасын жеткілікті жақсы білеміз. Басқаша айтқанда кез келген R соңғы шарты боиынша сәикес келетін мынандай әлсіз алғы шартты шығарып алатын ережені білу керек: Бұл алғы шартпен сипатталатын бастапқы жағдайда іске қосылған жүйе дұрыс аяқталуы, әрі R соңғы шартын қанағаттандыратын жағдайда қалуы керек.
Қысқасы, берілген S және R үшін WP(S,R)-ді қалай шығарып аламыз.
Жақсы анықталған программалау тілдерінің бірінде жазылған программаны предикаттар түрлендірушісін білсек, онда жеткілікті жақсы білетін конструкция ретінде қарастыруға болады.
Әрбір мұндай программа жақсы анықталған программалау тілінде жазылған өзінің текстімен беріледі.
Нақты бір конструкцияның (программманың) предикаттар түрлендірушісімен берілсе, ал программалар тілінің семантикалық мінездемесін осы тілде жазылған кез келген программаға предикаттар түрлендірушісін сәйкес қоюға мүмкіндік беретін ережелер жиыны ретінде қарастырамыз. Мұндай көзқарас тұрғысынан программаны сәйкес предикаттар түрлендірушісінің коды ретінде қарастыра аламыз.
Алайда, барлық R үшін WP(S,R)=F болатын S конструкциясы барлық керекті қасиеттерді қанағаттандырады. Бұл операторға да “қабылдау” деген ат берейік. “Қабылдау” операторының семантикасы былайша беріледі:
WP (қабылдау,R)=F кез келген R соңғы шарты үшін [ F- бос жиын, барлық жағдайлар кеңістігінде жалған болатын, орындалмайтын предикат].
Бұл оператор “қалай болса сол күйінде қалдыруды” да істей алмайды. “Қабылдамау” конструкциясын іске қоссақ, сол замат тоқтайды, яғни ақырғы жағдайына да жете алмайды.
Біз енді 2 операторлы программалау тіліне иеміз. Бірі “өткізу”, бірі “қабылдамау”. Бұл тілдің синтаксистік формальді түрде анықтамай кетуімізге болмайды.
Бұны біз Бэкустің нормаль формалары жүйесінде береміз: (өткен нормаль сабақтардан белгілі)
<оператор>:= өткізуқабылдамау.
Былай оқылады: синтакстистік категорияның операторы деп аталатын элементі (< >), өткізу не (1) қабылдау деп анықталады (: :=)
3. Меншіктеу операторы.
4. Конструкциялар композициясы.
1. Келесі бір предикаттар түрлендірушісі (анағұрлым қызғылықты) мынаған негізделеді: R соңғы шартының формальді өрнегінде қайсыбір айнымалының әрбір енуін (яғни осы айнымалы кездескен сайын ) қайсы бір өрнекпен (не тұрақтымен) ауыстырып отырады.
Егер R предикатына х айнымалының барлық енуін қайсібір (Е) өрнегімен ауыстырылып отырса, онда бұл түрлендірудің нәтижесін
REx арқылы белгілейміз. [Мұндай түрлендіру 1-4 қасиеттерді қанағаттандырады].
Бұл предикаттар түрлендірушісі “меншіктеу операторы” деп аталынады және ол мыналарды анықтауы керек:
-
Ауыстырылатын айнымалы атауы;
-
Предикаттар түрлендірушісіне сәйкес келетін ереже – ауыстыру
екендігі;
-
Осы айнымалының соңғы шарттағы барлық енуін ауыстыратын
өрнек;
Егер х айнымалысы (Е) өрнегімен ауыстырылуы керек болса, онда бұл оператордың жазбаша көрінісі мынадай болады:
х:=Е
Бұл оператордың семантикасы былай анықталады:
wp(“x:=E”,R)=REx
Бэкустың нормал формаларын пайдаланып, тілдің формальді синтаксисін кеңейтеміз:
<оператор>::= өткізуқабылдау <меншіктеу операторы >
<меншіктеу операторы>::=<айнымалы>:=<өрнек>
соңғы қатарды былай оқу керек: “ меншіктеу операторы” деп аталатын синтаксистік категория элементі “айнымалы” деп аталатын синтаксистік категория элементімен, одан кейін келетін меншіктеу белгісі “ :=”, одан соң “өрнек” деп аталатын синтаксистік категория элементі ретінде анықталады.
Мысал: WP (“a:=7”, a=7) = {7=7}
WP (<>, a=13)={2*b+1=13}={b=6}
WP (<>,a>b)={a-b>b}={a>2*b}.
КРЕДИТ №2
Достарыңызбен бөлісу: |