programm anas valodas semantika n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Programmēšanas valodas: Semantika PowerPoint Presentation
Download Presentation
Programmēšanas valodas: Semantika

Loading in 2 Seconds...

play fullscreen
1 / 15

Programmēšanas valodas: Semantika - PowerPoint PPT Presentation


  • 153 Views
  • Uploaded on

Programmēšanas valodas: Semantika. Datorzinātnes pamati. Semantikas definēšana: ievada apsvērumi. Programmēšanas valoda – jēdzienu, konstrukciju kopums (sistēma), kas paredzēts programmu veidošanai (algoritmu aprakstam).

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Programmēšanas valodas: Semantika' - edolie


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
semantikas defin ana ievada apsv rumi
Semantikas definēšana: ievada apsvērumi

Programmēšanas valoda – jēdzienu, konstrukciju kopums (sistēma), kas paredzēts programmu veidošanai (algoritmu aprakstam).

Sintakse: programmu formēšanas un attēlošanas likumi (programmu kā instrukciju sistēmu veidošanas un pieraksta likumi)

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?)

“Praktiskā” semantika: kā programma tiek izpildīta uz konkrētā datora?

Konkrēts valodas L kompilators katrai programmai valodā L piekārto noteiktu ielādes moduli. Kompilators definē semantiku – atbilstību starp programmām un ielādes moduļiem (pieņemam, ka zinām, kādā veidā tiek izpildīts ielādes modulis).

Kā secināt, ka otrs kompilators uz tā paša vai otra datora realizēs to pašu semantiku? – Vajadzīgs semantikas apraksts, kas ir neatkarīgs no konkrētā datora, konkrētā kompilatora.

Papildus tam, cilvēks var gribēt arī rakstot programmu, zināt, kādā veidā tai būtu jādarbojas. – Vajadzīgs semantikas apraksts cilvēkam saprotamos terminos.

semantikas apraksts dabisk vai form l valod
Semantikas apraksts: 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: - neatkarīgs no konkrētās implementācijas,- cilvēkam saprotamos terminos.

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ā citi var rakstīt programmas šajā valodā un tās izpildīt.- …

programm anas valodu semantikas uzdo ana
Programmēšanas valodu semantikas uzdošana

Matemātiski precīza semantika saista katru programmu ar noteiktu matemātisku objektu, kas “labi” raksturo šīs programmas realizēto diskrēto procesu.

Kādi ir šie matemātiskie objekti?

Iespējas ir dažādas (šeit daži piemēri):

  • Paplašināts automāts, abstrakta mašīna, stāvokļu pāreju grafs, u.taml. (operacionālā semantika)
  • Funkcija, kas raksturo programmas izejas datu atkarību no ieejas datiem (denotacionālā semantika)
  • Attiecība starp programmas ieejas un izejas datiem (dabiskā semantika)
  • Matemātiska teorija, kas satur visus noteiktā loģiskā valodā pierakstāmos apgalvojumus, kas ir patiesi attiecībā uz konkrēto programmu (aksiomātiskā semantika)
  • Algoritms, kas katrai programmai dotajā valodā piekārto kādu programmu citā valodā, kuras semantika jau ir zināma (translatīvā semantika)

Vienai valodai var būt vairākas semantikas (tad gan vajadzīgi “saskaņotības” pierādījumi starp tām).

main go st vok a j dziens
Mainīgo stāvokļa jēdziens

Operacionālās semantikas intuīcija: mēģina formāli aprakstīt darbības, ko programma savā darba laikā veic soli pa solim.

Programmas “momentuzņēmums”: ja apturētu programmu kādā darbības brīdī, ko tad redzētu:

- programma ir nonākusi līdz kārtējai izpildāmai komandai (vietai programmā);

- katram programmas mainīgajam ir noteikta vērtība.

Programmas stāvoklis: < vadības stāvoklis, mainīgo stāvoklis >

Vadības stāvokļu kopa: C, vadības stāvoklis c  C. Programmai, kas nav rekursīva, C ir galīga kopa.

Mainīgo kopa Var (varam domāt, ka Var – galīga kopa), mainīgo vērtību kopa Val. Mainīgo stāvoklis – funkcija  : Var  Val.Mainīgo stāvokļu kopa StVar = Fun(Var, Val),   StVar.

Programmas stāvoklis: s = < c,  >.Stāvokļu kopa: C  StVar

Operacionālā semantika: apraksta stāvokļu maiņas likumus (soli pa solim).

Dabiskā semantika: saista uzreiz programmas sākuma un beigu stāvokļus.

abstrakt sintakse programmu strukt ras uzdo ana

while (x=y) do c

if xy then y:=y-x c1

c0else x:=x-y c2 fi

od

Abstraktā sintakseProgrammu struktūras uzdošana

Programma - “kokveida” objekts, piemērs: L.K.D.

Demonstrāciju valoda IMP, formācijas likumi uzdod abstrakto sintaktisko struktūru (reālām valodām - sarežģītāka sintakse).

AExp: a ::= n | x | a0 + a1 | a0 - a1 | a0 * a1

BExp: b ::= true | false | a0 = a1 | a0 a1 | b0 | b0 b1 | b0 b1

Com: c ::= skip | x := a | c0 ; c1 | if b then c0 else c1 fi | while b do c0 od

n  Z - konstante, x  Var - mainīgais

a - aritmētiska izteiksme, b - loģiska izteiksme, c – komanda

Abstraktā sintakse atspoguļo programmu strukturālo raksturu. Katra programma – skip programma, piešķiršana, virknes kompozīcija, if, vai while.

Programma – strukturāls objekts. Iespējama strukturālā indukcija pa programmas veidošanas koku.

Atgādinājums:c1 ; (c2 ; c3) un (c1 ; c2) ; c3 ir divas dažādas programmas.

semantikas defin jums izteiksmes att ls x y 3
Semantikas definējums: izteiksmesAttēls: x + (y * 3)

Mainīgo stāvoklis (funkcija) :  : Var  Z

Mainīgo stāvokļu kopa: StVar = Fun(Var, Z) ( StVar)

Aritmētiskas izteiksmes semantika: aVal: AExp  StVar  Z

Strukturāls definējums: aVal(n, ) = n

aVal(x, ) =  (x)

aVal(a0 + a1 , ) = aVal(a0, ) + aVal(a1, )

aVal(a0 - a1 , ) = aVal(a0, ) - aVal(a1, )

aVal(a0 * a1 , ) = aVal(a0, ) * aVal(a1, )

Loģiskas izteiksmes semantika: bVal: BExp  StVar  {true, false}bVal(true, ) = true; bVal(false, ) = false; bVal(b0 , ) = not bVal(b0 , ) bVal (a0 = a1, ) = [ aVal(a0, ) = aVal(a1, ) ] bVal (a0 a1, ) = [ aVal(a0, )  aVal(a1, ) ] bVal (b0 b1 , ) = [ bVal(b0, ) and bVal(b1, ) ] bVal (b0 b1 , ) = [ bVal(b0, ) or bVal(b1, ) ]

komandu izpilde dabisk semantika
Komandu izpilde: dabiskā semantika

Substitūcija:’ =  [n/x], ja (1) ’(x) = n un

(2) ’(y) = (y), ja (y  x )

Apzīmējumi: b , ja bVal(b, ) = true

 b , ja bVal(b, ) = false

Komandu semantikas vispārējais formāts:

<c,  >  ’  Com  StVar  StVar

Ja komandu (programmu) c izpilda sākuma mainīgo stāvoklī, tad rezultāts būs ’.

Strukturāla definīcija:

(1) <skip,  >  (2) < x := a,  > [n/x], ja aVal(a, ) = n

(3) < c0 ; c1,  > ’ , ja < c0,  > ’’ un < c1, ’’ > ’

(4a) < if b then c0 else c1 fi,  > ’ , ja  b un < c0,  > ’

(4b) < if b then c0 else c1 fi,  > ’ , ja  b un < c1,  > ’

(5a) < while b do c0 od,  >  , ja  b

(5b) < while b do c0 od,  > ’ , ja  b

< c0,  > ’’

< while b do c0 od, ’’ > ’

dabisk s semantikas izveduma piem rs

while (x=y) do c

if xy then y:=y-x c1

c0else x:=x-y c2 fi

od

Dabiskās semantikas izveduma piemērs

Notācija:  = {x  6, y  9}, ’ = {x  6, y  3}, ’’ = {x  3, y  3},

b1 = (x=y) , b2 = xy

aVal(x-y, ’) = 3 ’’ = ’ [3/x]

2

aVal(y-x, ) = 3 ’ = [3/y]’ b2 < c2 , ’> ’’ ’’ b1

2 4b 5a

 b2 < c1 ,  > ’ ’ b1 < c0 , ’> ’’ < c, ’’ > ’’

4a 5b

 b1 < c0 ,  > ’ < c, ’ > ’’

5b

< c,  > ’’

determinit tes teor ma
Determinitātes teorēma

Teorēma: Ja <c,  >  ’ un <c,  >  ’’ , tad ’ = ’’

Pierādījums. Izmantojam strukturālo indukciju pa komandas c definīcijas koku. Apskatām visus gadījumus, kāda var būt komanda c.

(1) Ja c  skip, tad vienīgā iespējamā tās izpilde ir <c,  >  , tātad ’ =  = ’’

(2) Ja c  x := a, tad <c,  >  * iespējams tikai, ja aVal(a, ) = n un * = [n/x], tātad ’ =  [n/x] = ’’.

(3) Ja c  c0 ; c1, tad <c, >  * iegūstams tikai, ja <c0, >** un <c1, **>* . Izmantojam induktīvo pieņēmumu. No c0 determinitātes seko, ka nav iespējami divi dažādi **, tālāk no c1 determinitātes seko, ka nav iespējami divi dažādi *.

(4) Ja c  if b then c0 else c1 fi, tad šķirojam 2 gadījumus:  b vai  b.Ja  b, tad <c,  >  ’ iespējams iegūt tikai ar 4a likumu, tātad <c,  >  ’ tad un tikai tad, ja <c0,  >  ’. Tā kā c0 ir determinēta saskaņā ar induktīvo pieņēmumu, tad arī c ir determinēta. Gadījums  b izspriežams analoģiski.

(5) Ja c  while b do c0 od, tad ja  b, tad ’ =  = ’’, tātad šim  c ir determinēta.Ja  b, izmantojam indukciju pēc mazākā no <c,  >  ’,<c,  >  ’’, izveduma koku dziļumiem (5b likuma pielietošanas reižu skaits) n. Ja n=0, esam jau aplūkotajā situācijā  b. Ja <c,  >  ’ vai <c,  >  ’’ iegūstams ar izvedumu dziļumā k+1, tad secinām, ka <c0,  >  * vienam vienīgam *, bet c ir determinēts stāvoklim *, jo <c, * >  ’ vai <c, * >  ’’ iegūstams ar izvedumu dziļumā k (induktīvais pieņēmums).

determinit tes teor ma pier d juma koment ri
Determinitātes teorēma: pierādījuma komentāri

Teorēma: Ja <c,  >  ’ un <c,  >  ’’ , tad ’ = ’’

Pierādījums. Izmantojam strukturālo indukciju pa komandas c definīcijas koku. Apskatām visus gadījumus, kāda var būt komanda c … … …

Indukcija pa programmas struktūru ir tipiska metode šāda veida pierādījumos (tā ir tipiska metode objektu, kas ir strukturāli definēti, īpašību pierādīšanai).

Vienkāršākajos gadījumos pierādījums bija salīdzinoši vienkāršs.

Pierādījuma gaitā varēja ievērot, ka izmantojām semantikas definīcijas likumus apgrieztus otrādi, “ar kājām gaisā”.

Kāpēc to varēja darīt? (A  B un B  A taču nav viens un tas pats).

Iemesls: arī semantikas attiecība ir definēta induktīvi, uzskaitot visus iespējamos veidus, kā varam iegūt trijniekus <c,  >  ’. Katrā no gadījumiem varēja redzēt, ka attiecīgā pāreja varēja tikt iegūta atbilstoši semantikas likumiem tikai vienā vienīgā veidā.

Kopumā pierādījums tomēr nav ļoti vienkāršs: līdzās ārējai indukcijai cikla operatora gadījumā bija vajadzīga arī vēl viena indukcija pēc semantikas izveduma koka dziļuma (pēc minimālā no 2 izveduma koku dziļumiem).

Vai vērts ar šādu “acīmredzamu” lietu pierādīšanu nodarboties: ir vērts, jo pierodam strādāt ar programmām, kā ar matemātiskiem objektiem.

komandu izpilde operacion l semantika
Komandu izpilde: operacionālā semantika

Operacionālā jeb viena soļa semantika.

Komandu semantikas vispārējais formāts (viens solis): < c,  > > < c’, ’ >

Definējam: < c,  > >* < c’, ’ >, ja < c,  > >> … > < c’,’ >

Tukšā komanda: E, katrai c: c ; E  c  E ; c

Soļu virknes semantika: < c,  > > ’, ja < c,  > >* < E, ’ >

Strukturāla definīcija:

(1) <skip,  > > < E,  >

(2) <x := a,  > > < E, [n/x] >, ja aVal(a, ) = n

(3) < c0 ; c1,  > > < c’; c1, ’ > , ja < c0,  > > < c’,’ >

(4a) < if b then c0 else c1 fi,  > > < c0,  >, ja  b

(4b) < if b then c0 else c1 fi,  > > < c1,  >, ja  b

(5a) < while b do c0 od,  > > < E,  > , ja  b

(5b) < while b do c0 od,  > > < c0 ; while b do c0 od,  > , ja  b

operacion l s semantikas izveduma piem rs

while (x=y) do c

if xy then y:=y-x c1

c0else x:=x-y c2 fi

od

Operacionālās semantikas izveduma piemērs

Notācija:  = {x  6, y  9}, ’ = {x  6, y  3}, ’’ = {x  3, y  3}, b1 = (x=y) , b2 = xy

< c,  > (5b) jo  b1

> < c0 ; c ,  > (4a) jo  b2

> < c1 ; c ,  > (3) jo < c1,  > > < E, ’ >,

(2) jo aVal(y-x, ) = 3, ’ = [3/y]

> < E ; c , ’ >

 < c, ’ > (5b) jo ’ b1

> < c0 ; c , ’ > (4b) jo ’ b2

> < c1 ; c , ’ > (3) jo < c1, ’ > > < E, ’’ >,

(2) jo aVal(x-y, ’) = 3, ’’ = ’[3/x]

> < E ; c , ’’ >  < c, ’’ >(5a) jo ’ b1

> < E , ’’ >

Tātad: < c,  > > ’’.Redzam, ka abas semantikas “sakrīt”.

semantiku atbilst ba a
Semantiku atbilstība (A)

Teorēma. Katrai komandai c, katram sākuma stāvoklim : < c,  >  ’tad un tikai tad, ja< c,  > > ’.

Pierādījums.A:< c,  > > ’  < c,  >  ’ B:  >

A: izmantojam indukciju pa programmas struktūru.

(1,2) skip, := gadījumi izriet tieši no definīcijām.

(3) Ja < c0 ; c1,  > >* < E, ’ >, tad šajā virknē būs vieta, kurai < c0 ; c1,  > >* < E; c1, ’’ >  < c1, ’’ > >* < E, ’ >, turklāt varam konstatēt < c0,  > >* < E, ’’ > (kamēr c0 komponente nav pabeigta, tikmēr pārejas sastāda šai komponentei iespējamu pāreju secību). Pēc indukcijas pieņēmuma iegūstam < c0,  > ’’ un < c1, ’’ > ’, pēc dabiskās semantikas 3. likuma secinām < c0 ; c1,  > ’.

(4) Ja < if b then c0 else c1 fi,  > >* < E, ’ >, tad, ja  b, tad < if b then c0 else c1 fi,  > > < c0,  > >* < E, ’ >. Tātad pēc indukcijas pieņēmuma < c0,  > ’. Pēc dabiskās semantikas 4a likuma secinām, ka < if b then c0 else c1 fi,  > ’. Ja  b, spriežam analoģiski pēc 4b.

(5) Ja< c, 0 > >* < E, ’ > , kur c  while b do c0 od, tad varam konstatēt, ka <c, 0> >* <c, 1> >* <c, 2> >* … >* <c, n> > < E, n> , kur n= ’, n  b un i <n: i b. Redzam, ka i <n: <c, i>  i+1. Ar indukciju pēc k, izmantojot dabiskās semantikas 5.likumu pierādām, ka <c, n-k> ’, ja k  n.

semantiku atbilst ba b
Semantiku atbilstība (B)

Teorēma. Katrai komandai c, katram sākuma stāvoklim : < c,  >  ’tad un tikai tad, ja< c,  > > ’.

Pierādījums.B:< c,  >  ’  < c,  > > ’

B: izmantojam (atkal) indukciju pa programmas struktūru.

(1,2) skip, := gadījumi izriet tieši no definīcijām.

(3) Ja < c0 ; c1,  > ’, tad šis fakts var būt iegūts tikai ar dabiskās semantikas 3. likumu, tātad eksistē ’’, kam < c0,  > ’’ un < c1, ’’ > ’. Pēc induktīvā pieņēmuma < c0 ,  > >* < E, ’’ > (**). Pēc operacionālās semantikas 3.likuma (pielietota katram virknes (**) solim)< c0 ; c1,  > >* < E; c1, ’’ >. Tā kā arī < c1, ’’ > >* < E, ’ >, tad < c0 ; c1,  > >* < E, ’ >.

(4) Ja < c,  >  ’ , kur c  if b then c0 else c1 fi, tad, ja  b, tad < c,  >  ’ var būt iegūts tikai pēc 4a likuma, tātad < c0,  >  ’, tātad pēc induktīvā pieņēmuma< c0 ,  > >* < E, ’ >.Pēc operacionālās semantikas 4a likuma< c,  > > < c0,  >. Pēc >*definīcijas iegūstam <c,  > >* < E, ’ >.Ja  b, spriežam analoģiski pēc 4b likumiem.

(5) Ja< c,  > ’, kur c  while b do c0 od, tad lietojam indukciju pa šī fakta izveduma koka dziļumu n. Ja n=0, tad  bun ’ = , tātad <c, > >* < E,’ >.Pāreja k -> k+1: <c,> ’ iegūts pēc 5a likuma no <c0,> ’’ un <c,’'> ’. Secinām<c0,> >’’ pēc strukturālās indukcijas pieņēmuma un <c,’'> >’pēcpieņēmuma indukcijai pan.Tātad < c,  > >’.