Top Banner
Programmēšanas valodu sintakse un semantika LU datorzinātņu bakalaura programma
27

Programmēšanas valodu sintakse un semantika

Jan 25, 2016

Download

Documents

elinor

Programmēšanas valodu sintakse un semantika. LU datorzinātņu bakalaura programma. Programmēšanas valodas jēdziens. Programmēšanas valoda – jēdzienu, konstrukciju kopums (sistēma), kas paredzēts programmu veidošanai (algoritmu aprakstam). - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Programmēšanas valodu sintakse un semantika

Programmēšanas valodu sintakse un semantika

LU datorzinātņu bakalaura programma

Page 2: Programmēšanas valodu sintakse un semantika

Programmēšanas valodas jēdziensProgrammēšanas valoda – jēdzienu, konstrukciju kopums (sistēma), kas

paredzēts programmu veidošanai (algoritmu aprakstam).

Algoritms: viennozīmīgs (determinēts) priekšraksts elementāru (atsevišķu, diskrētu) un efektīvu (izpildāmu) instrukciju secīgai izpildei. (+ masveidība, + mērķis, + garantēta apstāšanās).

Programma – algoritma pieraksts noteiktas konstrukciju sistēmas ietvaros.

Pamata prasības uz programmēšanas valodu:

1) Iespēja programmas izpildīt uz datora (uz dažādiem datoriem)

2) Iespēja lietotājam ērti strādāt ar programmām (piemērotība lietotāja uztverei). Programmu veidošana, lasīšana (uztvere), īpašību analīze, iespēja modificēt, …

Programmēšanas process – realitātes veidošana (konstruēšana), programma – daļa no realitātes, esamības.

Programmēšanas valoda – jēdzienu, konstrukciju sistēma, (ierocis - ?) kas izmantojama realitātes veidošanā

Vēsturiski: pirmās programmas tika rakstītas reģistru mašīnu valodās. Pirmā “augsta līmeņa” programmēšanas valoda FORTRAN 1956. gadā. Revolūcija programmēšanas attīstībā. Iespēja algoritmus aprakstīt cilvēkam intuitīvi labi uztveramos terminos.

Page 3: Programmēšanas valodu sintakse un semantika

Sintakse un semantikaProgrammēšanas valoda – jēdzienu, konstrukciju kopums

(sistēma), kas paredzēts programmu veidošanai (algoritmu aprakstam).

Programmēšanas valodas definēšanas pamata elementi:

(1) Sintakse:

Kādas ir konstrukcijas/jēdzieni programmēšanas valodā?

Kā šīs konstrukcijas ir attēlojamas lineārā vai grafiskā formā?

(2) Semantika:

Programmēšanas valodas konstrukciju nozīme (izpildes laikā)

Saistība starp programmām kā instrukciju sistēmām un to izpildes laika

diskrētajiem procesiem

Kas notiek katras programmas izpildes laikā?

Kāda ir valodas konstrukciju nozīme programmu izpildes laika terminos?

Page 4: Programmēšanas valodu sintakse un semantika

Sintakses uzdošana“Praktiskā” sintakse: programmu vajag uzrakstīt tā, lai kompilators (uz

konkrētā pieejamā datora) to atzītu par derīgu attiecīgās valodas programmu.

Vai cits kompilators arī atzīs par derīgām tieši šīs pašas programmas?

Valodas vienotība, saprotamība: vajadzīgi arī no konkrētā kompilatora neatkarīgi likumi, kā veidojami pareizi programmu teksti.

Vajadzīgs sintakses apraksts, kas ir:- precīzs- neatkarīgs no konkrētā datora/kompilatora- cilvēkam viegli uztverams.

Bieži izmantots līdzeklis sintakses uzdošanai – bezkonteksta gramatikas.

- Matemātiski precīza valoda.

- Sniedz informāciju arī par programmas struktūru.

Varam jautāt – vai esošais kompilators precīzi realizē dotās valodas sintaksi?

Page 5: Programmēšanas valodu sintakse un semantika

Semantikas uzdošanaSintakse: bezkonteksta gramatikas. Semantika - ?

Vai semantiku var uzdot ar konkrētu kompilatoru: programmai P atbilst tas ielādes modulis, ko šis kompilators sagatavo no P teksta?

Vai cits kompilators sagatavos ekvivalentu ielādes moduli?

Ko nozīmē “ekvivalents”?

Kā lietotājs zinās, kādus rezultātus var sagaidīt no šādas programmas P izpildes?

Nepieciešams semantikas apraksts:- nav atkarīgs no konkrētas realizācijas,- ir lietotājam viegli uztverams.

Semantikas uzdošana: bieži vien ar valodas “rokasgrāmatu” (reference manual), neformālā vai pusformālā tekstā aprakstot valodas konstrukciju nozīmi.

Semantikas uzdošanas tekstiem tendence kļūt aizvien precīzākiem, formālākiem.

Precīzas (formālas) semantikas uzdošana: matemātiski precīzi modeļi / struktūras. Dažādi semantikas uzdošanas veidi.

Page 6: Programmēšanas valodu sintakse un semantika

Semantika: dabiskā vai formālā valodā?

Semantika: saistība starp programmām kā instrukciju sistēmām un to izpildes laika diskrētajiem procesiem (kas notiek katras programmas izpildes laikā? Kāda ir valodas konstrukciju nozīme programmu izpildes laika terminos?)

Semantikas apraksts: - nav atkarīgs no konkrētas realizācijas,- ir lietotājam viegli uztverams.

Semantikas apraksts dabiskā valodā, papildus izmantojot shematisku notāciju, balstoties uz intuīciju par diskrēto procesu izpildi – bieži vien var būt pietiekams, lai programmēšanas valodu lietotu (rakstītu programmas, u.c.).

Matemātiski precīza valodas semantikas definīcija vajadzīga:

- lai varētu matemātiski precīzi spriest par programmu īpašībām (analizēt programmas, pierādīt programmu īpašības), ja semantika ir precīza, programma kļūst par matemātisku objektu.

- lai varētu implementēt (realizēt) programmēšanas valodu (uzrakstīt tai kompilatoru, interpretatoru, u.c.) , veidot vidi, kurā var rakstīt programmas šajā valodā un tās izpildīt.

Precīza semantika – gan esošām, gan arī jaunām programmēšanas valodām.

Page 7: Programmēšanas valodu sintakse un semantika

Semantikas uzdošanas veidiDivas pamata metodes programmēšanas valodu realizācijai: interpretators,

kompilators (pieejamas arī hibrīdās implementācijas).

Interpretators: izpilda programmu (programmas tekstu) soli pa solim uz konkrētajiem ieejas datiem

Kompilators: pārveido programmas tekstu uz tādu valodu, ko dators “prot” izpildīt.

Divas pamata metodes semantikas uzdošanai:

Operacionālā semantika: skaidro (matemātiski precīzas notācijas ietvaros) programmas izpildi soli pa solim (kā no viena stāvokļa iegūstams nākamais).

Translatīvā semantika: pārtulko dotās valodas konstrukcijas uz (matemātisku vai programmēšanas) valodu, kuras semantika jau zināma

Iespējamas arī citas metodes, kā arī šo metožu varianti.

Vienai un tai pašai valodai semantiku var uzdot vairākos veidos. Vajadzīga saskaņotība!

Page 8: Programmēšanas valodu sintakse un semantika

Plašāks konteksts: formālās metodesSintakses un semantikas precīza definīcija –

programmēšanas valodas formāla specifikācija.

Plašāks konteksts: matemātiski precīzu (formālu) metožu izmantošana programmu veidošanā un darbā ar programmām.

Formālas notācijas izmantošana neatceļ prasību pēc tās saprotamības.

Formāls – balstās uz formu. Matemātiski precīzi definēts.

Sinonīmi: formāls – precīzs.

Formālā loģika: noskaidrot izteikuma patiesumu, balstoties uz tā formu.

Piemēram, A A ir patiess, neatkarīgi no tā, kāds ir A “saturs”.

Formāls izvedums no aksiomām.

Iespējams pārbaudīt uz datora.

Matemātiskā loģika: spriedumi tiek veidoti formāli.

Programmas izpilde: simbolu manipulācija – formāla aktivitāte.

Filosofiska alternatīva: forma – saturs.

Page 9: Programmēšanas valodu sintakse un semantika

Formālās specifikācijas

Formāls – balstās uz formu. Matemātiski precīzi definēts.

Formālā loģika: noskaidrot izteikuma patiesumu, balstoties uz tā formu.

Formāla, precīza specifikācija: spriedumi par specifikāciju izdarāmi aplūkojot tikai specifikācijas “formu” – uzrakstīto specifikācijas tekstu.

Viss būtiskais “saturs”, specifikācijas nozīme, ietverts arī formā, uzrakstīts tekstā. Nekas nepaliek uz “roku vicināšanu”.

Formālā specifikācija – visas būtiskās sistēmas īpašības ietvertas arī formāli uzrakstītajā specifikācijas tekstā. Nav “apslēptu pieņēmumu”, lietu, kuras ir skaidras “tāpat”.

N.B. Specifikācijas formalitāte neatceļ prasību pēc specifikācijas lasāmības, saprotamības!

Sintakses un semantikas definēšanas metodes – jābūt gan formālām (= matemātiski precīzām), gan arī cilvēkam intuitīvi saprotamām.

Page 10: Programmēšanas valodu sintakse un semantika

Galvenās kursa tēmasIevads. Sintakses un semantikas jēdzieni.

Automāti un abstraktās mašīnas.

Konkrētā un abstraktā sintakse. Gramatikas.

Leksiskā un sintaktiskā analīze.

Programmēšanas rīki: funkcionālā un loģiskā programmēšana.

Dabiskā un operacionālā semantika. Semantiku atbilstība.

Semantika paralēlu procesu sistēmām.

Translatīvā semantika. Atribūtu gramatikas.

Abstrakto (algebrisko) mašīnu metode semantikas uzdošanai. C, C++, JAVA semantika.

Denotacionālā semantika.

Programmu daļējās un pilnās korektības apgalvojumi.

Hoara loģika (aksiomātiskā semantika).

Verifikācijas nosacījumi, to ģenerēšana.

Loģiskās anotācijas programmēšanas valodās.

Papildmateriāls: abstraktā interpretācija.

Page 11: Programmēšanas valodu sintakse un semantika

Prasības

Patstāvīgi izpildīti, noteiktos termiņos iesniegti un eksāmenā atbildēti mājas darbi (80%). Mājas darbu iesniegšana e-studiju (moodle) vidē.

Mutisks eksāmens sesijas laikā (30%).

Atzīmes „izcili” iegūšanai jāizpilda vismaz divi paaugstinātas grūtības uzdevumi, vai arī jārealizē lielais projekts (var būt darbība grupās).

Lielais projekts – programmēšanas valodas realizācija balstoties uz precīzām sintakses un semantikas definīcijām. Var būt tādi realizācijas aspekti, kas kursa lekcijās aplūkoti daļēji.

Page 12: Programmēšanas valodu sintakse un semantika

LiteratūraPamatliteratūra, grāmata pieejamas tīmeklī:

H.R.Nielson, F.Nielson, Semantics with applications: a formal introduction

Papildliteratūra:

D.Gries, The Science of Programming

Z.Manna, Mathematical Theory of Computing, McGrawHill, 1974

F.Pagan, Formal Specification of Programming Languages: a panoramic primer

M.J.C.Gordon, Programming Language Theory and its Implementation, Prentice Hall International, 1988

E.Boerger, R.Staerk, Abstract State Machines, Springer, 2003.

C. Morgan, Programming from Specifications (pieejama tīmeklī).

Abststract State Machines, http://www.eecs.umich.edu/gasm/

Page 13: Programmēšanas valodu sintakse un semantika

Tēma: abstraktās mašīnas un automāti

Programmēšanas valodu sintakse un semantika

Page 14: Programmēšanas valodu sintakse un semantika

Atkāpe par modelēšanu: kas ir dators?Dažādi uztveres/matemātiskie modeļi. Varam uz datoru skatīties dažādos veidos.

(a) Dators kā lietotāja tekstu un tabulu apstrādes līdzeklis, uz datora iespējams

izpildīt lietojamas programmas (Word, Excel, u.c.)

(b) Dators kā vide programmēšanai (valodā C++, PASCAL, PROLOG, u.c.)

(c) Dators kā bināras simbolu virknes apstrādājoša iekārta (viss sastāv no 0 un 1,

baits – 8 biti, Kbaits – 1024 baiti, u.tml.)

(d) Dators kā fizikāli realizētu mikroshēmu sistēma, sastāv no diodēm, tranzistoriem,

u.c. elementiem.

Starp (b) un (c) vēl 3 līmeņi:

(b1) asemblera valoda (instrukcijas darbam ar reģistriem, atmiņas šūnām)

(b2) operētājsistēmas kodols (vada uzdevumu plūsmu datorā)

(b3) mikroprogrammas (procesora instrukciju realizācija loģisko operāciju līmenī).

Zemāks līmenis realizē operācijas, kas pieejamas (izmantojamas) augstākā līmenī.

Lai strādātu augstākā līmenī, nav jāzina visas zemākā līmeņa detaļas (lai brauktu ar

trolejbusu, nav jāzina tā dzinēja uzbūve).

Vienai un tai pašai sistēmai varam veidot dažādus matemātiskos modeļus.

Page 15: Programmēšanas valodu sintakse un semantika

Abstraktās mašīnasDiskrētais process:

tas, kas notiek datora programmas izpildes laikā.tas, kas notiek datora darbības laikā (0 un 1, vai citā līmenī).

Dažādi abstrakcijas līmeņi vienam un tam pašam diskrētajam procesam.

Diskrētam procesam - iespējama matemātisko modeļu veidošana un analīze.

Abstraktā mašīna – diskrētā procesa matemātiskais modelis (viens iespējams veids)

Abstraktā mašīna: vadības bloks + datu bloks

Abstraktās mašīnas stāvoklis: - norāde uz kārtējo instrukciju vadības blokā, - datu bloka saturs

Abstraktās mašīnas komandas izpilde:

- izpilda kārtējo instrukciju no vadības bloka (iespējams, izmaina datu bloka saturu; var būt arī ievada un izvada operācijas)

- uzstāda nākamo kārtējo vadības bloka instrukciju.

Vienkārša abstraktā mašīna: galīgs automāts (tukša datu telpa).

Galīgie automāti nozīmīgi gan no programmēšanas valodu sintakses, gan arī semantikas apraksta viedokļa.

Page 16: Programmēšanas valodu sintakse un semantika

Abstraktās mašīnas kā semantikas modelis

Piemērs: vienkārša programma un atbilstoša blokshēma.

Abstrakta mašīna – vadības bloks + datu bloks, komandas izpilde maina norādi uz kārtējo instrukciju vadības blokā, maina datu informāciju.

Blokshēma – “pusceļš” uz atbilstošās abstraktās mašīnas definīciju.

Vadības stāvokļu kopa: { A, B, C, D, E }

Datu stāvokļu kopa: StVar = {x,y} Z (vai Fun({x,y}, Z), vai Z Z)

Lai abstrakto mašīnu definētu precīzi, vajadzīgi vēl pāreju nosacījumi pA+, pA-, pB+, pB- (kā predikāti kopā StVar) un pāreju funkcijas fA+, fA-, fB+, fB-, fC, fD (kā funkcijas StVar StVar).

while (x=y) do if xy then y:=y-x else x:=x-y fiod

A: (x=y)

B: xy

C: y:=y-x D: x:=x-y

E: beigas

+

+

-

-

Page 17: Programmēšanas valodu sintakse un semantika

Galīgs automāts kā abstrakta mašīnaAbstrakta mašīna – vadības bloks + datu bloks, komandas izpilde maina norādi uz

kārtējo instrukciju vadības blokā, maina datu informāciju.

Galīgais automāts – vienkāršākā abstraktā mašīna, tikai vadības bloks.

Galīgs skaits dažādu stāvokļu un pārejas starp tiem.

“Kafijas automāts”:

Katrā brīdī atrodas vienā no 2 “stāvokļiem”:

Var pieņemt monētu, vai var izdot kafiju.

Stāvokli nosaka iepriekšējā darbību secība.

Galīgs dažādu stāvokļu skaits, galīgs skaits variantu, kā automāts var reaģēt pašreizējā situācijā.

Ir sistēmas, ko var adekvāti aprakstīt ar galīgu automātu.

Cita veida sistēmām galīgs automāts var būt “abstrakcija”, kas var atspoguļot vairākas (lai arī ne visas) būtiskas sistēmas/programmas īpašības.

Galīgi automāti būtiski gan valodu sintakses, gan semantikas uzdošanā (redzēsim arī atšķirības starp šiem 2 lietojumiem).

m k

Page 18: Programmēšanas valodu sintakse un semantika

Galīgs automāts (akceptors)Galīgu automātu (akceptoru) raksturo:

- Galīga stāvokļu kopa Q (kādos stāvokļos automāts var atrasties).

- Galīgs ieejas simbolu alfabēts I (kādus ieejas simbolus automāts var saņemt /

kādos notikumos automāts var piedalīties).

- Pāreju attiecība QIQ. q,a,q’ apzīmējam arī kā q -a q’, pieraksts

tam, ka no stāvokļa q, saņemot ieejā simbolu a, automāts var pāriet uz stāvokli q’.

- Sākuma stāvokļu kopa S Q, beigu stāvokļu kopa F Q.

Definējam, ka automāts “ir” kortežs: A = Q, I, , S, F (minētie 5 elementi automātu

raksturo viennozīmīgi).

Automāts “akceptē vārdu”. I* - galīgo vārdu kopa alfabētā I.

(x I* ) k: x = a1a2…ak, ik ai I.

Rakstam q -x q’, ja q -a1 q1 –a2 q2 … –ak qk =q’ – pāreja ar vārdu x no stāvokļa q

uz stāvokli q’.

Definīcija. Automāts A akceptē vārdu x I* , ja q S, q’ F: q -x q’.

Definīcija. Automāta A valoda L(A) = {x I* | A akceptē x}.

Page 19: Programmēšanas valodu sintakse un semantika

Determinēti automātiGalīgs automāts: A = Q, I, , S, F, kur QIQ, S Q, F Q.

Definīcija. Automāts A ir determinēts, ja

(1) ! qS (automātam ir tieši viens sākuma stāvoklis) un

(2) qQ, aI: q –aq’ q –aq’’ q’ = q’’

(ne vairāk kā 1 pārejas iespēja no katra stāvokļa ar katru ieejas alfabēta

simbolu).

Automāts ir “nedeterminēts”, ja tam neizpildās kāda no prasībām (1) vai (2).

Kādreiz lieto vārdus “nedeterminēts automāts”, lai uzsvērtu, ka nav zināms

tas, ka automāts ir determinēts (bet tas nav arī izslēgts, ka automāts var

izrādīties determinēts).

Varam rakstīt Det Aut, kur Det – determinēto automātu kopa, bet Aut – visu

(vispār sakot, iespējams, ka nedeterminētu) automātu kopa.

Definīcija. Automāts A ir pilns, ja qQ, aI eksistē tāds q’, kam q –aq’ .

Piezīme. Atsevišķos avotos par determinētiem var tikt saukti automāti, kas ir

vienlaikus gan determinēti (šeit dotās definīcijas nozīmē), gan pilni.

Page 20: Programmēšanas valodu sintakse un semantika

Galīgi automāti, turpināts

Galīgs automāts A = Q, I, , S, F, kur QIQ, S Q, F Q.

Automāts definē diskrēto procesu: katrā brīdī automāts atrodas noteiktā

stāvoklī. Ienākošie simboli maina automāta stāvokli.

Katrs no stāvokļiem parāda, kādas ir tālākās iespējamās automāta darbības

(sk. kafijas automāts).

Katram automātam tā darbības laikā iespējams galīgs “iekšējo situāciju”

skaits.

Iekšējā situācija – raksturo, kas ar automātu noticis pagātnē, un kas ar to var

notikt nākotnē.

Galīgam automātam: galīga, ierobežota atmiņa par to, kas ir noticis pagātnē.

C++, PASCAL programma: vadības informācija + dati, mainīgo vērtības, var

izdarīt vairāk, nekā ar galīgo automātu.

Page 21: Programmēšanas valodu sintakse un semantika

Galīgi automāti: piemēriGalīgs automāts A = Q, I, , S, F, kur QIQ, S Q, F Q.

1) I = {a,b}, L = { x I* | #(b,x) ir nepāra skaitlis } (#(b,x) – burta b ieiešanas reižu

skaits vārdā x).

b

b

a

cc

a

a

b,c

a,b,c

b

b

a

a

Katrs no stāvokļiem raksturo saņemto b burtu skaitu – pāra skaits, vai nepāra skaits.

Automāts nevar atšķirt, vai saņemti 5 vai 9 b burti.

2) I = {a,b,c}, L = { x I* | y,z I*, x = y a b b z } (akceptē tos un tikai tos vārdus, kas

satur fragmentu abb).

Katrs no stāvokļiem raksturo to sākuma fragmentu no vārda “abb”, kas jau ir nolasīts.

Šis sākuma fragments raksturo, kādas darbības ar ieejas simboliem veicamas

turpmāk.

Page 22: Programmēšanas valodu sintakse un semantika

Galīgie automāti: iespējasGalīgs automāts var atpazīt valodas:

L = { x1, x2, …, xn } – jebkura galīga valoda.

I = {a,b}, L = { x I* | #(b,x) ir nepāra skaitlis } . Var būt arī burta ieiešanas reižu skaita dalīšanās ar citu skaitli, noteikts minimāli nepieciešamais burtu skaits, u.taml.

I = {a,b,c}, L = { x I* | y,z I*, x = y a b b z } (akceptē tos un tikai tos vārdus, kas satur fragmentu abb). Var būt jebkurš cits fragments. Var būt gan apakšvārds, gan apakšvirkne, u.c. Piemērus var turpināt.

Valodas, ko galīgs automāts var atpazīt – t.s. regulārās valodas (sk. automātu teorija).

Teorēma. Ja valodām L1 un L2 eksistē galīgi automāti, kas tās atpazīst, tad galīgi atpazīstoši automāti eksistē arī valodām:- L1 L2, L1 L2, I* \ L1, - L1 L2 = { x y | x L1, y L2 }- L1* = { x1 x2 … xn | n 0 in xiL1 }

Teorēmu var pielietot arī vairākkārtīgi, lai no vienkāršākām valodām uzkonstruētu sarežģītākas valodas (pierādījumā pieejamas konstrukcijas, kas pēc vienkāršākas valodas atpazīstošajiem automātiem uzkonstruē automātus sarežģītākām valodām).

Page 23: Programmēšanas valodu sintakse un semantika

Regulārās valodas (definīcija)

Regulāras izteiksmes alfabētā I, kopa R(I):

Ja a I, r0,r1 R(I), tad kopa R(I) sastāv no šādiem elementiem r:

r ::= | | a | (r0)|(r1) | (r0)(r1) | (r0)* | (r0)

Katrai regulārai izteiksmei r atbilst valoda L(r) I*.

L() =

L( ) =

L(a) = { a }

L(X|Y) = L(X) L(Y)

L(XY) = L(X) L(Y) = { xy | x L(X) y L(Y) }

L(X*) = i N L(Xi), kur L(X0) = un L(Xi+1) = L(XXi)

L((X)) = L(X)

Page 24: Programmēšanas valodu sintakse un semantika

Galīgie automāti: ierobežojumiValodas, ko neviens galīgs automāts nevar atpazīt (piemēri):

L = { an bn I n N }, vārdi, kas sastāv no noteikta skaita a burtiem, kam seko tikpat daudz b burti.

Automātam, kas šādu valodu atpazītu, būtu jāakceptē katru no tajā ietvertajiem vārdiem, un tas nedrīkstētu akceptēt nevienu citu vārdu. Var pierādīt, ka šāds galīgs automāts nav iespējams (“pa ceļam” jāatceras potenciāli neierobežots informācijas daudzums – cik tad a burtu līdz šim bija?).

Pieņemsim, ka ir kaut kāds automāts A, kas atpazīst valodu L. Automātam A ir noteikts skaits stāvokļu – n.

Apskatām ceļu (vienu no ceļiem), kādu automāts A iziet no sākuma stāvokļa līdz akceptējošam stāvoklim ar vārdu an bn , šajā ceļā stāvokli pēc fragmenta ai apstrādes apzīmējam ar si.

Aplūkojam stāvokļus s0, s1, sn. Tā kā šo stāvokļu ir n+1, bet automātā ir tikai n dažādi

stāvokļi, tad si = sj, kaut kādiem i, j, kam i < j. Redzam, ka automāts akceptē arī

vārdu an-j+i bn, ko tam nevajadzētu akceptēt. Pretruna.

a a a a aa

an-j bnai

si = sj

Page 25: Programmēšanas valodu sintakse un semantika

Galīgie automāti: ierobežojumi (2)Valoda, ko neviens galīgs automāts nevar atpazīt:

L = { x I* | x ir simetrisks } (ja I sastāv no vismaz 2 simboliem).

Pierādījums: analoģisks valodas { an bn I n N } gadījumam.

Pieņemam pretējo, ka eksistē kāds automāts A, kas var atpazīt valodu L, šim automātam ir noteikts stāvokļu skaits, n.

Aplūkojam vārdu an b an , tas ir simetrisks, tādēļ A šo vārdu atpazīst, eksistē ceļš automātā no sākuma stāvokļa uz beigu stāvokli, gar kuru var tikt nolasīts šis vārds.

Fiksējam vienu no šādiem ceļiem, šajā ceļā stāvokli pēc fragmenta ai apstrādes apzīmējam ar si.

Analoģiski kā iepriekšējā gadījumā pierādām, ka šis automāts akceptēs arī vārdu an-j+i b an , kur i < j n, kurš nav simetrisks.

Pretruna.

Page 26: Programmēšanas valodu sintakse un semantika

Nedeterminēti automāti: valodasTeorēma. Katram nedeterminētam automātam A eksistē atbilstošs determinēts

automāts A’, kuram L(A’) = L(A).

Automāts A’ akceptē tos un tikai tos vārdus, kurus akceptē automāts A.

Ja automātam A ir n stāvokļi, tad automātam A’ stāvokļu skaits nepārsniegs 2n.

Konstrukcijas ideja (no A iegūt A’):

Ja A = Q, I, , S, F, tad A’ = 2Q, I, ’, {S}, F’, kur jaunās stāvokļu kopas 2Q

elementi ir visas kopas Q apakškopas;

Q1 -a’ Q2, ja Q2 = { q | q’ Q1: q’ -aq }; Q1 F’, ja q Q1: q F.

Daudzos gadījumos konstrukcijas var būt vienkāršākas (mazāk stāvokļus prasošas).

Novērojums: dažādas abstrakto mašīnu klases (Det un Aut), tomēr viena un tā pati

izteiksmes spēja (spēja akceptēt vienas un tās pašas valodas).

Piemērs: uzkonstruēt atbilstošu determinētu automātu.

aa,b

a,b a,b a,b a,b…

Page 27: Programmēšanas valodu sintakse un semantika

Nedeterminēti automāti: diskrētas iekārtasJa mēģinām nedeterminētu automātu “izpildīt”, ar kādu diskrēto procesu sastopamies?

Kas notiek tad, ja vienā brīdī dažādas iespējas izpildīt pāreju, kas atbilst saņemtajam

ieejas simbolam a?

Klasiskā pieeja (kā iepriekšējā slaidā): automāts atceras visas iespējas, kādas bija

izdarīt šo pāreju (atceras visus stāvokļus, līdz kuram ar līdz šim saņemto vārdu bija

iespējams aiziet) un procesa (ieejas vārda) beigās apskatās, vai starp visām

iespējām bija kāda, kas ir “laba” (noved līdz akceptējošam stāvoklim).

Reālā laika pieeja: automāta iekšienē notiek nedeterminēta “izvēle” katra simbola

saņemšanas brīdī.

Vai šādi 2 automāti ir ekvivalenti (uzskatām, ka visi automātu stāvokļi ir akceptējoši)?

Abi automāti akceptē vienu un to pašu valodu: a* ( {an | n N } ).

Reālā laika izpratne: labās puses automātā iespējams strupceļš – stāvoklis, no kura

nav iespējama neviena tālāka pāreja. Reālā laika sistēmām tas ir slikti.

a aa