Size-change grafer
Size-change grafer
Size-change grafer
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
1 Sammenfatning<br />
På baggrund af size-<strong>change</strong> terminationsanalyse af funktionelle programmeringssprog<br />
præsenteret i [POPL01] konstrueres en metode til size-<strong>change</strong> terminationsanalyse<br />
af et imperativt sprog. Det viser sig, at analysen er en anelse<br />
mere kompliceret i det imperative tilfælde. En implementation af metoden evalueres,<br />
og eksperimenter viser, at metoden er brugbar om end ineffektiv til analyse<br />
af større programmer.<br />
2 Indledning<br />
Bestemmelsen af hvorvidt et program terminerer, er en vigtig del af at skrive<br />
meningsfyldte og korrekte programmer. Derfor er det eftertragtet at finde en<br />
metode der på baggrund af programmets struktur kan sige noget om termination.<br />
Det er imidlertid ikke muligt generelt automatisk at afgøre, om et givet program<br />
terminerer for alle inddata. Terminationsanalyse går ud på at estimere terminationsegenskaben,<br />
så man ved hjælp af en algoritme i visse tilfælde kan give et<br />
positivt svar på terminationsspørgsmålet.<br />
Denne rapport bygger på den gennemgang af size-<strong>change</strong> terminationsprincippet<br />
anvendt på funktionelle programmeringssprog 1 , der præsenteres i artiklen<br />
[POPL01]. Denne artikel forudsættes kendt af læseren. Motivationen for at beskæftige<br />
sig med terminationsanalyse er, jvf. denne artikel, at terminationsanalyse<br />
har anvendelse inden for blandt andet:<br />
Programverifikation<br />
Automatisk programtransformering<br />
Partiel evaluering<br />
Hertil kan tilføjes, at terminationsanalyse i sig selv er et videnskabeligt interessant<br />
emne.<br />
Formålet med denne rapport er at undersøge size-<strong>change</strong> terminationsprincippets<br />
anvendelsesmuligheder for et imperativt programmeringssprog. Vi søger<br />
at bestemme, i hvor høj grad fremgangsmåden i det funktionelle tilfælde kan<br />
overføres, og hvor der i givet fald opstår problemer ved overgangen til imperative<br />
programmeringssprog. Dette vil vi gøre ved at betragte et simpelt konkret<br />
eksempel.<br />
Derudover søger vi at afgøre, hvor anvendelig vores udviklede metode er i en<br />
faktisk implementation. Specielt vil vi diskutere metodens egnethed i forbindelse<br />
med større programmer.<br />
Den resterende del af rapporten er struktureret således:<br />
Afsnit 3 beskriver size-<strong>change</strong> termination for funktionelle sprog med henblik<br />
på at give en basis for sammenligning med den imperative version,<br />
som det er sigtet at udvikle. Afsnit 3 er en sammenfatning af de for os<br />
væsentlige dele af artiklen [POPL01].<br />
I afsnit 4 beskrives syntaks og semantik for det imperative sprog som tjener<br />
til at illustrere size-<strong>change</strong> termination for imperative sprog. Dette er<br />
kommenteret med overvejelser om centrale egenskaber ved sproget.<br />
1 Vi vil overalt i denne rapport indskrænke os til at tale om første ordens programmeringssprog.<br />
3