Crc press баспасы Taylor & Francis баспа тобы



Pdf көрінісі
бет13/26
Дата20.12.2019
өлшемі6,26 Mb.
#53875
1   ...   9   10   11   12   13   14   15   16   ...   26
Байланысты:
Бағдарламалау тілдеріне кіріспе (1)
corel-draw-zhayly-zhalpy-tusinik, corel-draw-zhayly-zhalpy-tusinik, Jobs and professions

3.10-мысал
<Идентификатор>  анықтамасында  үш  терминалды  емес  символдан: 
{<идентификатор>, <әріп>, <цифр>} тұратын топты пайдаланатын үш 
өнімдік қағида бар. Мұнда <әріп> пен <цифр> <идентификатор> тер-
миналды емес символын анықтау үшін пайдаланылады. Осылайша, үш 
өнімдік қағида бір синтаксистік диаграммаға бірігеді.
<идентификатор>, <әріп>және<цифр> төменде көрсетілгендей:
<идентификатор>::= <әріп>  {(<әріп>  | <цифр>)}*
<әріп>::= ‘A’ – ‘Z’ ‘a’ – ‘z’
<цифр>::= ‘0’ – ‘9’

133
Алдымен  <идентификатор>терминалды  емес  символын  анықтайтын 
өнімдік қағидаға арналған синтаксистік диаграмма құрылады. 
<Идентификатор>  анықтайтын  өнімдік  қағиданы  бірінші  таңдайды, 
себебі  <идентификатор> анықтамасы өзіне оң жақ бөліктегі терминал-
ды  емес  символдардың  анықтамасын  қамтиды,  бұл  терминалды  емес 
символдарды кейінірек ашуға болады. 
<Әріп> және <цифр> терминалды емес символдарын синтаксистік ди-
аграмманы нақтылау үшін ашады. Өнімдік қағиданың сыныптары ара-
сындағы сәйкестікке байланысты өнімдік қағида синтаксистік диаграм-
маға ауысады. Соңғы синтаксистік диаграмма 3.9-суретте көрсетілген.
Identifier – идентификатор; letter – әріп; digit – сан; syntax diagram for 
production rule 1 for  - <идентификатор> үшін 1 өндірістік 
ереженің синтаксис диаграммасы; refining syntax diagram using rules 
2 and 3 – 2 және 3 ережелерді пайдаланып синтаксис диаграмманы 
өңдеу
3.9 - Сурет.  Бірнеше өнімдік қағидаларды пайдалану арқылы синтак-
систік диаграмма құру

134
3.3.2 Синтаксистік диаграммаларды синтаксистік қағидаларға ау-
дару
Синтаксистік диаграммаларды синтаксистік талдауышта қағидалар ге-
нераторында оларды пайдалану үшін мәтін нысанына түрлендіру қажет. 
Осылайша, тіл әзірлеушісі немесе бағдарламашы синтаксистік диаграм-
маны синтаксистік қағидалардың тиісті жинағына түрлендіруі мүмкін.
Синтаксистік  диаграмманы  өнімдік  қағидаға  аудару  өнімдік  қағида-
лардың  синтаксистік  диаграммасына  кері  процесс.  Синтаксистік  диа-
граммаға кіріктірілген синтаксистік диаграмманың сол бөліктері және 
тек терминалды символдар арқылы анықталатындар және анықталған 
терминалды емес символдар  өнімдік қағидаға өнімдік қағидалар мен 
3.8-суретте көрсетілген синтаксистік диаграммалар арасындағы терми-
налды емес символдардың сәйкестіктерінің көмегімен аударылады.
Жаңа маңызды терминалды емес символдар кіріктірілген синтаксистік 
диаграммалар үшін құрылады.
Өнімдік қағиданы құрған соң синтакистік диаграмманың тиісті бөлік-
терін жаңа анықталған терминалды емес символмен ауыстырады және 
үдеріс  қайталанады.  Процесс  синтаксистік  диаграмма  толығымен  бір 
терминалды емес символға ауысқанда тоқтайды.
3.11-мысал
3.7-суретте көрсетілген синтаксистік диаграммаға арналған қағида жиы-
ны құру үшін кіріктірілген бөліктердің көпшілігі - (‘0’ | ‘1’ | ... | ‘9’)  тобын 
анықтайтын  бірнеше  параллельді  маршруттар  және  (‘a’|...|‘z’)  тобын 
анықтайтын бірнеше параллельді маршруттар <әріп>::a’|...|‘zжәне 
<цифр::0 | ...| 9’түрленеді. <әріп> мен <цифр> терминалды емес 
символдарын енді бірнеше параллельді маршруттардың орнына қояды, 
синтаксистік  диаграмма  3.7а  суретте  көрсетілген  диаграммаға  дейін 
қысқартылады. 
3.7a  суретте  <әріп>  терминалды  емес  символы  мен  (<әріп>|<цифр>) 
баламалы символдарының нөлдік немесе үлкен санының кіруін көрсе-
тетін артқы рекурсияның анықтамасы көрсетілген.
Осылайша,  жаңа  өнімдік  қағиданың  түрі  мынадай:  <идентифика-
тор>::=<әріп> {(<әріп> | <цифр>)}*.
3.4 Сөйлем құрылымын тексеру
2. Бағдарламаның түрлену үдерісі сөйлем құрылымын тексеруден баста-
лады. Сөйлем құрылымын тексеру екі сатыдан тұрады: (1) "токендердің" 
көмегімен  сөйлем  символын  ішкі  форматқа  түрлендіру  және  (2)  осы 
сөйлемнің  ішкі  форматын  тілдің  грамматикалық  қағидалардың  көме-

135
гімен тексеру. Бірінші саты лексикалық талдау деп аталады, ал екінші 
саты синтаксистік талдау деп аталады. Екінші сатының нәтижесі бо-
лып талдау ағашы табылады. Талдау ағашы -S = s0, …, sm жүйелігі 
түріндегі сөйлем
3. Түбір бастапқы символы;
Шығу: T синтаксистік талдау ағашы
{ .қысқартылған нысан = S;
...талдау қатесі = жалған;
...T  = нөлдік ағаш;
While ((қысқартылған нысан ≠ түбір) &&not(талдау қатесі) )
Егер қысқартылған түрдегі si.. sj жүйелілігі болса, si… sj== оң жақ 
бөлік (pk∈R),мұнда 1 ={ терминалды емес = сол жақ бөлік (pk);
қысқартылған нысан = ауыстырғыш (қысқартылған нысан, si… sj, тер-
миналды емес символ); 
T = T + доға (si..sj→ сол жақ бөлік (pk));
}
әйтпесе талдау қатесі = шындық;
}
Егер қайту болмаса (талдау қатесі) (T); әйтпесе баспа (‘талдау қатесі’);
}
3.11-Сурет.  Төменнен жоғары типті сөйлемді синтаксистік талдаудың 
оңайлатылған схемасы.
Өнімдік қағидаға сәйкес келетін тиісті жүйелілікті табу процесі  - LL(K)- 
және LR-талдауыштар сияқты синтаксистік талдаудың әр түрлі автомат-
тандырылған тәсілдерін қолдану арқылы шешілетін күрделі тапсырма. 
Автоматтандырылған талдауыштар 3.4.5-тарауда қысқаша сипатталған. 
3.13-мысал
Қанекей 3.2-суретінде көрсетілген грамматиканы пайдалана отырып, “x 
+ 3 * 4,”талдайық. Сөйлем бес символдан құралған: ‘x’, ‘+’, ‘3’, ‘*’,және
‘4’.  Бұл  символдар  лексикалық  талдауышта  тиісті  токендерде  түрле-
нетін  болады.  Соған  қарамастан,  ыңғайлы  болу  үшін  токендердің  ор-
нына символдарды олардың бастапқы нысанында пайдаланатын бола-
мыз. Кез-келген символ немесе 5 символдан тұратын жүйелілік өнімдік
қағиданың оң жақ бөлігіне сәйкес келуі мүмкін. 3.3-суретте ұсынылған
грамматиканы пайдалана отырып, 3.12 және 3.13-суреттерде көрсетіл-
ген талданған екі баламалы ағашты аламыз. Бір сөйлем үшін бірден көп
талдау ағашын беретін грамматика бір мәнді емес деп аталады, оны
қолданбаған жөн.

136
3.12-Сурет. Грамматикадағы әр мәнділікпен байланысты алынған дұрыс 
емес талданған ағаш.   
әріп
3.13-СУРЕТ. x + 3*4 өрнегіне арналған  дұрыс талданған ағаш
3.4.3 Грамматикалық әр түрлі мәнді жою
Әр түрлі мәнді грамматика сөйлем жеке мағынаға ие болу керек деген 
бағдарламалау тілінің негізгі принциптерінің бірін бұзады. Бір сөйлемге 

137
арналған екі әр түрлі талдау ағашы төменгі деңгейдегі екі әр түрлі нұсқа-
улар жиынына түрленуі мүмкін, ол екі әртүрлі есептеулерге алып келеді. 
Грамматикалық әртүрлі мән туындайтын екі негізгі есептеу жолы бар: 
(1) өнімдік қағидада операторлардың басымдығын ескермейді және (2)
енгізу деңгейі резервтелген сөздермен бөлінген енгізілген құрылымдар-
да конструкцияларды салыстыру бір мағыналы болмайды.
3.14-мысал
3.2-суретте <өрнекті> 3.5 арқылы анықтауға арналған грамматика бір 
өнімдік қағидада операторларды топтау кезінде арифметикалық өрне-
ктер мен логикалық өрнектердің  бірнеше анықтамаларын пайдаланға-
нына байланысты бір мәнді емес. Арифметикалық қағидаларда ‘*’ және 
‘/’ бинарлық операторлары ‘+’ и ‘−’ бинарлық операторларына қараған-
да үлкен басымдыққа ие. Сол сияқты, логикалық өрнектерде ‘not’ унар-
лық  операторлар  ‘&&’  (логикалық  И)  қарағанда  жоғары  басымдыққа 
ие, ал ‘&&’ (логикалық И) ‘||’ (логикалық НЕМЕСЕ) қарағанда жоғары 
басымдыққа ие.
Өрнектерде әр түрлі мәнмен күресудің бір тәсілі – дөңгелек жақшаны 
пайдалана отырып, өрнекті нақты бөлу. Соған қарамастан,басымдықтың 
кезектілігі  грамматикалық  қағидаларда  бірнеше  өнімдік  қағидаларға 
арналған өнімдік қағиданы бөлу арқылы кодталуы мүмкін. Анықтама-
лары  көп  өнімдік  қағида  жаңа  терминалды  емес  символдарды  енгізу 
кезінде  өнімдік  қағидаларға  бөлінеді,  олар  кейіннен  операторлардың 
арту басымдығы бар басқа терминалды емес символдарының арасында 
анықталады және соңғы өнімдік қағида аса жоғары басымдықты опера-
торларды пайдаланады. Алдымен басымдығы жоғары операторлар тал-
данады, себебі жоғары басымдықты операторлар талданады, аса жоғары 
басымдықты операторлар бірінші кезекте жоғарыдан төмен типті син-
таксистік талдауда қолданылады. Өрнектің тиісті әртүрлі мәнді грамма-
тикасы 3.14-суретте көрсетілген.
 <А-өрнек>  арифметикалық  өрнекке  арналған  өнімдік  қағида  <көп 
анықтамалы  өрнек>  және  <A-шарт>  екі  қосымша  терминалды  емес 
символын пайдалана отырып,үш өнімдік қағидаға бөлінген. Осыған ұқ-
сас, <L-өрнек> логикалық өрнегіне арналған өнімдік қағида  <өрнек-И
және <L-шарт> екі қосымша терминалды емес символдарын пайдала-
нып, үш өнімдік қағидаға бөлінген. Терминалды емес <А-өрнек> симво-
лы «көп анықтамасы бар өрнек» арқылы анықталды. «көп анықтамасы 
бар  өрнек»  терминалды  емес  символы  «А-шарт»қатысты  анықталды. 
«А-шарт»  терминалды  емес  символы  (<A-өрнек>),  немесе  <иденти-
фикатор>, немесе <сан> қатысты анықталды. <L-өрнек> терминалды 

138
емес  символы  <өрнек-И>.терминалды  емес  символымен  анықталады. 
<Өрнек-«and»  >  терминалды  емес  символы  <L-шарт>  терминалды 
емес символымен анықталады. <L-шарт>  терминалды емес символы 
артынан жақшада логикалық өрнектер тобы немесе фигуралық жақша-
ларды салыстыру немесе терминалды емес <идентификатор> символы 
немесе , «true» терминалды символы немесе «false» терминалды симво-
лы еретін «not» міндетті емес терминалды символына қатысты анықта-
лады.
<өрнек>::=<A-өрнек>|<L-өрнек
 
 
(1)
<A-өрнек>::=  <A-өрнек>  (‘  +  ’  |‘-‘)<көп  анықтамалы  өрнек>|<көп 
анықтамалы өрнек> (2)
<көп  анықтамалы  өрнек>::=<көп  анықтамалы  өрнек>(‘*’|‘/’)<A-
шарт>|<A-шарт> 
 
 
(3)
<A-шарт>::= (‘ <A-өрнек> ‘)’ |<идентификатор>|<сан
(4)
<L-өрнек> ::= <L-өрнек> ‘||’ <өрнек-И> 
(5)
<өрнек-И>::= <өрнек-И>‘&&’<L-шарт
(6)
<L-шарт> ::= [not](‘(‘<салыстыру>‘)’|‘(‘<L-өрнек> ’)’ | <идентифика-
тор> | true | false 
(7)
<салыстыру>::=<A-өрнек> (‘>’ | ‘<’ | ‘>=’ | ‘=<’ | ‘==’) <A-өрнек>  
...(8)
<идентификатор> ::= <әріп>{(<әріп>|<цифр>)}*   
 
(9)
<сан>::= [(‘ + ’|’−‘)] {<цифр>} + 
 
      (10)
<әріп>::= ‘a’| ‘b’ | … |’z’| ‘A’ | ‘B’ | … | ‘Z’ 
 
 
(11)
<цифр>::=0’ | ‘1’| … |’9’ 
 
 
(12)
3.14-СУРЕТ. Өрнектің әр түрлі мәнді грамматикасы
3.15-мысал
Қанекей 3.14-суретте көрсетілген грамматиканы пайдалана отырып, “x 
+ 3 * 4” сөйлемін талдайық. ‘3’ және ‘4’ литералдары мына қағидалар-
дың кезектілігі бойынша: 12-қағида, 10-қағида, 9-қағида және 4-қағи-
даның көмегімен <A-шарт> терминалды емес символына дейін қысқа-
рады.  Қысқартылған<A-шарт>−  <A-шарт>”  нысаны  3-қағидасының
көмегімен<көп анықтамалы өрнек> терминалды емес символына дей-
ін қысқарады және жаңа қысқартылған нысан “x + <көп анықтамалы
өрнек>.” түріне ие болады. х символы мына қағидалардың кезектілігі
бойынша: 11-қағида, 9-қағиданың көмегімен терминалды емес <иден-
тификатор> символына дейін қысқарады және аралық нысан “<иден-

139
тификатор> + <көп анықтамалы өрнек>.” болады» Терминалды емес 
<идентификатор>  символы  ары  қарай  4-қағиданың,  3-қағиданың, 
2-қағиданың  кезектілігі  арқылы  терминалды  емес  “<A-өрнек>  симво-
лына дейін қысқарады» Жаңа қысқартылған нысан “<A-өрнек> + <көп
анықтамалы  өрнек>”  түріне  ие  болады,  ол  2-қағиданың  көмегімен
<A-өрнек>  терминалды  емес  символына  дейін  қысқарады.  <A-өрнек>
терминалды  емес  символы  1-қағиданың  көмегімен  <өрнек>  бастапқы
символына дейін қысқарады. Алынған бірегей және дұрыс ағаш 3.15-су-
ретте ұсынылған..
3.15-Сурет.    Бір мағыналы грамматиканың көмегімен орындалған “x + 
3 * 4” өрнекке синтаксистік талдау.
3.3-КЕСТЕ.  Енгізілген шартты оператордың сәйкес келмеуін түсіндіру
Дұрыс емес түсіндіру  
 
Дұрыс түсіндіру
if(x>4) then
if(y> 0) then
return(1);else return(0)
(a)
Else бөлік сыртқы if салыстырылады
if(x>   4) then
if(y> 0) then
return(1); else
return(0);
(b)
else бөлік жақын if салыстырылады

140
3.4.3.1 Енгізілген құрылымдардың әр түрлі мәнділігі
Шартты  оператордың  екі  нұсқасы  бар:  (1)  if<оператор>then<опера-
тор> немесе (2) if<оператор>then<оператор>else<оператор>. Бірін-
ші  нұсқа  салыстырылмайды,  себебі  else  бөлігі  жоқ,  ал  екінші  нұсқа 
салыстырылады, себебі else бөлігі бар. Енгізілген шартты операторды 
құру үшін салыстырылатын және салыстырылмайтын нұсқаның үйле-
суі әр түрлі мәнділікке алып келеді, себебі 3.3-кестеде көрсетілгендей, 
else бөлігі сыртқы if-пен немесе ішкі if-пен салыстырылатыны түсініксіз 
болады.
Екі оператордың да екі “if” кіруі және бір “else” кіруі болады. Бағдар-
ламалау қағидасы  else жақын if кіруімен байланысатынына құрылған. 
Дұрыс түсіндіру үшін екі әрекет нұсқасы бар: (1) бөлгіштердің көме-
гімен  ішкі  салыстырылатын  бөлікті  жазу,  ол  оны  сыртқы  блоктардан 
нақты ажырату үшін жасалады немесе (2) енгізілген шартты оператор-
ды өңдеу үшін бір мәнді грамматиканы жазу. Бір мәнді грамматикаға 
мысал төменде келтірілген
<шартты оператор>::= <салыстырылатын-шартты оператор > |
<салыстырылмайтын-шартты оператор>
<салыстырылатын-шартты оператор>::= if<шарт>then
<салыстырылатын-шартты оператор>
else<салыстырылатын-шартты оператор>|
<басқа операторлар>
<салыстырылмайтын-шартты оператор>::=if<шарт>then
<шартты оператор>  |
if<шарт>then
<салыстырылатын-шартты оператор>
else<салыстырылмайтын-шартты оператор>
3.4.4 Абстрактілі синтаксистік ағаш
Абстрактілі  синтаксис  қағидасынан  жасалған  талдау  ағашы  абстрак-
тілі синтаксистік ағаш деп аталады. Абстрактілі синтаксистік ағашқа 
абстрактілі синтаксис қағидаларында жоқ нақты синтаксистік қағида-
лардағы барлық терминалды емес символдар кірмейді. Өрнек оператор-
лармен байланысады. Мысалы, “x + 3 * 4” өрнекке арналған абстрактілі 
синтаксистік ағаш 3.16-суретте көрсетілген.
Нақты  синтаксистік  ағаштар  (  нақты  синтаксистік  қағидалардан 
құрылған  ағаштар)    артық  терминалды  емес  символдарды  және  сөй-
лемге  тікелей  мағына  қоспайтын  аса  төменгі  деңгейдегі  терминалды 
емес символдарын жою көмегімен абстрактілі синтаксистік ағаштарға 

141
дейін қысқарады.Мысалы, 3.15-суретте көрсетілген “x + 3 * 4” өрнекке 
арналған нақты синтаксистік ағаш тікелей семантикаға жатпайтын және 
3.16-суретте  көрсетілген  абстрактілі  ағаштан  алынатын  {<A-шарт>, 
<көп анықтамалы өрнек>, <цифр>} сияқты көптеген төменгі деңгейде-
гі терминалды емес символдардан тұрады.
3.16 –Сурет. “x + 3 * 4.”өрнекке арналған абстрактілі синтаксистік ағаш
Абстрактілі  синтаксистік  ағаш  бағдарламалау  тілдерінің  тілдік  кон-
струкцияларын  түсіну  үшін  пайдалы,  себебі  нақты  синтаксистік 
ағаштардың маңызды емес бөлшектерін жасырады. Абстрактілі синтак-
систік  ағаштарды  сондай-ақ  бағдарлама  кодының  синтаксистік  басқа-
рылатын  генерациясында  пайдаланады:  синтаксистік  талдаудан  кейін 
нақты синтаксистік ағаш тиісті абстрактілі синтаксистік ағашқа дейін 
қысқарады, ал содан кейін аралық деңгейдегі кодты құру үшін абстрак-
тілі синтаксистік ағашқа семантикалық талдау жүргізіледі. Абстрактілі 
синтаксистік ағаштарды сондай-ақ бағдарламаны талдауда және бағдар-
ламаның абстрактілі құрамын түсіндіргенде пайдаланады.
3.4.5 Автоматтандырылған синтаксистік талдау 
Алдыңғы тарауда біз  талдау ағашын құру кезінде өнімдік қағиданың оң 
жақ бөлігін салыстыратын тиісті жүйелілік автоматы түрде анықтала-
тын болады деп болжадық және соңғысы тиісті өнімдік қағиданың сол 
жақ бөлігіндегі терминалды емес символына дейін қысқаратын болады. 
Осындай  жүйелілікті  анықтау  үшін  адамдар  өзінің  интеллектуалдық 
мүмкіншіліктерін пайдаланады, компьютерлерге өнімдік қағиданың оң 
жақ бөлігіне сәйкес келетін осындай бір мәнді жүйелілікті анықтау үшін 
синтаксистік талдау бағдарламасын автоматтандыру қажет. 
Синтаксистік  талдаудың  автоматтандырылған  тәсілдерін  екі  негізгі 

142
санатқа  бөлуге  болады:  жоғарыдан  төмен  типті  синтаксистік  талдау 
және төменнен жоғары типті синтаксистік талдау. Жоғарыдан төмен 
типті  синтаксистік  талдауды  орындау  кезінде,  басқаша  рекурсивті 
түсу тәсілі деп аталатын, ең шеткі сол жақты терминалды емес символ 
өнімдік қағиданың оң жақ бөлігіне дейін кеңейеді және талданатын сөй-
лемнің тиісті бөлігімен салыстырылады. Синтаксистік талдау бағдарла-
масы бастапқы қалыпқа қайтып оралады – балама шешімді табу үшін 
кері бағытта жүреді – егер салыстыру сәтсіз болса, балама қағидалар 
ұсынады.
Бастапқы  қалыпқа  қайта  оралу  –  есептеу  тұрғысынан  тиімсіз  тәсіл. 
Тиімділікті  арттыру  және  бастапқы  қалыпқа  қайту  қажеттілігін  жою 
үшін  терминалды  символды  алдын  ала  көру  пайдаланылады.  Болжа-
малы синтаксистік қарау M × N өлшемді синтаксистік талдау кестесін 
пайдаланады, мұнда M– грамматикадағы терминалды емес символдар 
саны және N– терминалды символдар саны (алдын ала қарау үшін пай-
даланатын).Синтаксистік  талдау  кестесінің  әр  ұяшығы  анықтаманы 
көрсететін бір немесе бірнеше өнімдік қағидаларға сілтемеден тұрады. 
Егер ұяшық бірегей өнімдік қағидаға сілтеме жасаса, онда өнімдік қағи-
да таңдалған болып саналады және алдын ала қарау процесі аяқтала-
ды. Олай болмаған жағдайда алдын ала көп символ қаралады және бір 
өнімдік қағида анықталмағанша, кестенің тиісті ұяшықтары зерттелетін 
болады.
Төменнен  жоғары  типті  синтаксистік  талдау,  сондай-ақ  ұлғайма-
лы  синтаксистік  талдау  деген  атауы  бар  талдау  талданатын  сөйлем-
нен басталады және жоғарыға жылжиды. Синтаксистік талдау аралық 
қысқартылған  нысандарда тиісті жүйелілікті анықтайды және оларды 
өнімдік қағиданың сол жақ бөлігіндегі терминалды емес символға дейін 
қысқартады. Ұлғаймалы талдаудың негізгі тобына LR(k) синтаксистік 
талдау  жатады:  k  синтаксистік  талдауды  орындау  кезінде  бір  мәнді 
шешім қабылдау үшін алдын ала қарау қажет символдар максималды 
санын білдіреді.
LR(k) синтаксистік талдау сөйлемнің оң жақ шеткі бөлігін бастап, кері 
бағытта талдау ағашын құрады. 
LR синтаксистік талдау бірқатар басымдыққа ие: (1) ол рекурсивті емес, 
(2) ол бастапқы қалыпқа қайтып оралмайды, (3) оның көмегімен барлық
бағдарламалық конструкцияларда синтаксистік талдау жүргізуге бола-
ды және (4) ол грамматикадағы әр түрлі мәнді таба алады. LALR ( ал-
дын ала қаралатын LR синтаксистік талдауыш) атауына ие синтаксистік
талдауыштың ерекше LR(K) ішкі класы бағдарламалау тілдеріндегі син-
таксистік  талдау  бағдарламалары  үшін  кеңінен  пайдаланылады  және

143
синтаксистік  талдауыштың  автоматтандырылған  генераторларының 
көмегімен құрылады. Автоматтандырылған синтаксистік талдауыштар-
ды зерттеу компиляторларды зерттеу курсына кіреді.
3.5 Семантика
Бағдарламалау тілдерінде семантиканың бес негізгі түрі пайдаланыла-
ды: операциялық семантика, аксиомалық семантика, денотациялық се-
мантика, әрекет семантикасы және мінез-құлық семантикасы. Келесі 
бөлімдерде семантиканың әр түрінің ерекшеліктері түсіндіріледі.
3.5.1 Операциялық семантика
Операциялық  семантика  бірінші  рет ALGOL  68  бөлігі  ретінде  сипат-
талды және кейіннен Плоткин тұжырымдады. Оның негізгі міндеті сөй-
лемнің абстрактілі командалардың тиісті жиыны көмегімен абстрактілі 
машинаның абстрактілі жай-күйінің анықтамасына әсер етуін сипаттау 
арқылы мағына беру болып табылады. Жоғары деңгейдегі басқарудың 
абстракция  мағынасы  кішкене  қадамдық  абстрактілі  командалардың 
жүйелілігін  білдіреді,  орындау  нәтижесінде  есептеу  жай-күйі  жаңа 
есептеу  жай-күйіне  ауысады.  Есептеу  жай-күйі  абстрактілі  машинаға 
байланысты,  өз  кезегінде  бағдарламалау  парадигмасына  және  бағдар-
ламалау тілдеріне негізделеді. Әр түрлі абстрактілі командаларды орын-
дау кезінде есептеу жай-күйіндегі өзгерістер операциялық семантиканы 
сипаттайды. Кішкене қадамдық абстрактілі командалардан  құралған 
операциялық  семантика  ішкі  қадамды  операциялық  семантика  деп 
аталады. FOR циклі, шартты оператор немесе  WHILE циклі сияқты 
деректерді  және  жоғары  деңгейлі  басқару  абстракциясын  пайдалану 
арқылы есептеу жай-күйіне ауысу мәселесімен айналысатын операци-
ялық семантика үлкен қадамды операциялық семантика деп аталады.
Біздің жағдайымызда төменгі деңгейлі абстрактілі командалармен жоға-
ры деңгейлі бағдарламаларды машинамен аударуды түсіну үшін біз не-
гізіне 2.1-тарауда сипатталған фон Нейман машинасы енгізілген маши-
наны  алуды  шештік.  Абстрактілі  машина  императивті  бағдарламалау 
парадигмасын үлгілей алады. Есептеу жай-күйі  үштік нысанды (орта, 
жад блогы, дамп), ал бағдарлама – ауыспалы хабарландыру, өрнектер 
және  командалардың  жүйелілігін  білдіреді.  Ауыспалы  хабарландыру 
ортаны өзгерту жолымен есептеу жай-күйін түрлендіреді, команда есеп-
теу  жай-күйін  жад  блогын  өзгерту  жолымен  өзгертеді,  өрнек  есептеу 
жай-күйін өзгертпей жад блогын оқиды. Ішкі бағдарламаны шақыру ор-
таны, сондай-ақ жад блогын өзгертеді. Оператор құрама болуы мүмкін 
және ортаны, сондай-ақ жад блогын өзгертуі мүмкін. Мысалы, integerx

144
10 операторлар ауыспалы хабарландыруды, сондай-ақ тағайындау опе-
раторларн да пайдаланады: 
 Integer ауыспалы хабарландыру ортаны өзгертеді, ал x= 10 тағайындау 
операторлар жад блогын өзгертеді.
2.4-тарауда сипатталғандай, есептеу жай-күйі σ грек әрпімен, ал есептеу 
жай-күйінің арасындағы ауысу үлгісі үшін оператор S символымен бел-
гіленеді. Оператордың операциялық семантикасы (S, σ0) → σ1 ретінде 
анықталады. Құрама оператор <SSs> түрге ие, мұнда S символы бірін-
ші операторды білдіреді, ал Ss символы - қалған операторлар. 
(бос команда, σ) → σ
(литерал, σ ) →  литерал
(идентификатор, σ ) → r-мағына(идентификатор) (σ ) егер ((идентифика-
тор →l-мағына) εσE и (l-мағына →r-мағына) εσS(жаңа идентификатор, 
<σE, σS, σD>) → <σE⊕ (идентификатор →l-мағына), σS⊕ (l-мағына → 
белгісіз), σD> (exp1 opexp2, σ ) → мағына1 op мағына2 иσ өзгермейді
мұнда (exp1, σ) → мағына1 және (exp2, σ ) → мағына2,  және
opε {қосу, азайту, көбейту, бөлу} (идентификатор = exp, <σE, σS, σD> ) 
→ <σE, σS⊕ (l-мағына(идентификатор) → мағына, σD>
мұнда (exp, <σE, σS, σD>) → мағына
3.17-  Сурет.    Қарапайым  абстрактілі  командалардың  операциялық  се-
мантикасы.
Құрама операторлардың мағынасын түсіну үшін бізге операторлардың 
жүйелілік семантикасын түсіну қажет. Операторлар жүйелілігінің опе-
рациялық семантикасы мынадай түрге ие: (<SSs>, σ0) → (Ss, σ1) →* 
σfinal, мұнда (S, σ0) → σ1.  “→*” символы саны операторлардың қалған 
жүйелілігіндегі операторлар санына тең ауысуды білдіреді, 
соңғы есептеу жай-күйін білдіреді.
3.17-суретте бос команда, литералды бағалауидентификаторды көру, 
идентификатор  мәнінің  өзгеруі,  қарапайым  өрнекті  бағалау,  құрама 
өрнекті  бағалау,  жаңа  идентификаторды  жариялау  және  тағайын-

145
дау операторлар сияқты ішкі қадамдық аса кең таралған абстрактілі ко-
мандаларға арналған операциялық семантика көрсетілген.Оператордың 
әрекетін түсіндіру үшін σесептеу жай-күйін <σE, σS, σD> үш оператор-
ларның нысаны түрінде белгілейміз, мұнда σE– орта – идентификатор-
лар жиынының l-мағыналы жиынға түрленуі, σS жад блогын білдіреді 
—l-мағыналы  жиынның  r-мағыналы  жиынға  түрленуі,  ал  σD  дампты 
білдіреді — шақырылатын процедураны орындау уақытында мұрағат-
талған  немесе  жабық  (көрінбейтін)  процедура  тізіліміндегі  жеке  орта 
мен блоктар жүйелілігі.
Абстрактілі  машинаның  есептеуіш  жай-күйі  бос  командаларды  орын-
даған  соң,  литералды  бағалаған  соң,  идентификаторды  қараған  соң 
және өрнекті бағалаған соң сақталады. σE ортасында идентификаторды 
анықтау кезінде оның l-мағынасы қаралады, ал 1-мәннің тиісті мағына-
сы тиісті r-мәнін табу үшін σS жад блогында қаралады.
Құрама  өрнекті  бағалау  есептеу  жай-күйін  өзгертпейді.  Ағымдағы  σ 
есептеу жай-күйіне қатысты екі өрнек өлшенеді, ал екі мағынаның нәти-
жесін алу үшін бинарлық оператор қолданылады. <ident> жаңа иденти-
фикаторын жариялау ортаны өзгертеді: 
σE  ортасында  жаңа  (<ident>→l-мағына)  байланысу  қосылады.Оның 
үстіне тиісті σS жад блогына жаңа (l-мағына → белгісіз) байланысу қо-
сылады.
Тағайындау операторлар бұл – құрама оператор. Тағайындау оператор-
ларның мағынасы былай сипатталады: өрнектің оң жақ бөлігін ағымдағы 
σ0 есептеу жай-күйінің көмегімен бағалау (1) және ағымдағы σS жад 
блогының жаңаруы өрнектің оң жақ бөлігінің есептелген мағынасы бар  
идентификатордың 1-мәнінің байланысының өзгерісі есебінен.
Ішкі қадамды абстрактілі командалардың мағынасы абстрактілі маши-
нада  анық  танылса,  солай  жоғары  деңгейдегі  абстракцияның  құрама 
мағынасы    біздің  санамыздың  жоғары  деңгейлі  абстрактілі  команда-
ларға тең ішкі қадамды абстрактілі командалардың кезектілігін түсіну 
үшін айқын болады. 
Жоғары деңгейлі басқару абстракциясы абстрактылы командалар жүй-
елігіне басқару ағындары диаграммасы түрінде жоғары деңгейлі басқа-
ру абстракциясының жүйелілігіне және ары қарай басқару ағындарын 
диаграммаға  жоғары  деңгейлі  басқару  абстракциясы  сияқты  түрдегі 
есептеу  жай-күйі  әсер  ететін,  кіші  қадамды  абстрактылы  командалар 
жүйелігіне түрлендіріледі. Шартты оператор, WHILE циклі, FOR циклі, 
процедураны шақыру сияқты жоғары деңгейлі басқару абстракциясын 
түрлендіру  және  оларды  төменгі  деңгейлі  абстрактылы  командаларға 
үйлестіру 5-тарауда сипатталады.

146

Достарыңызбен бөлісу:
1   ...   9   10   11   12   13   14   15   16   ...   26




©www.engime.org 2024
әкімшілігінің қараңыз

    Басты бет