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.
Som det ses, er der i denne løkke en nedastigende tråd (nr. 2), og dermed kan<br />
det konkluderes, at programmet size-<strong>change</strong> terminerer.<br />
6 Implementation af size-<strong>change</strong> terminationsanalyse<br />
For at kunne foretage praktiske eksperimenter er en implementation af den i<br />
afsnit 5 præsenterede metode udviklet.<br />
Der er selvfølgelig lagt vægt på korrektehed i implementationen, men overvejelser<br />
om effektivitet og god programmeringsstil har ikke indgået; en såkaldt<br />
quick-and-dirty implementation.<br />
Programmet er skrevet i ML og er opbygget af følgende moduler:<br />
Parser En parser, genereret med ML-YACC.<br />
Flow<strong>grafer</strong> Opbygning af flow<strong>grafer</strong> sker ved for et hvert programpunkt<br />
at finde de programpunkter der kan nås i et beregningsskridt.<br />
Cykler De simple cykler i flowgrafen findes ved en dybde-først søgning.<br />
Desuden indeholder modulet funktionerne til eliminering af ikke mulige<br />
cykler, se afsnit 5.7.<br />
<strong>Size</strong>-<strong>change</strong> <strong>grafer</strong> For programmet estimeres for hvert programpunkt<br />
den tilhørende size-<strong>change</strong> graf. (Nedadstigende sammenhænge findes<br />
netop ved udtryk kun indeholdende pred operatoren, værdier i udtryk<br />
der involverer de øvrige operatorer kan ikke med sikkerhed beskrives).<br />
Modulet indeholder funktioner til at finde tråde i en given kaldsekvens.<br />
Verifikation Modulet undersøger, om der for enhver cyklus eksisterer en<br />
nedadstigende tråd. Efter undersøgelse af de simple cykler undersøges alle<br />
mulige kombinationer af cykler med fælles programpunkter. Hvis verifikationen<br />
af en cyklus fejler, afbrydes med en udskrift af den funde cyklus.<br />
Ved programmer der ikke size-<strong>change</strong> terminerer returneres altså kun den<br />
først fundne cyklus uden en nedadstigende tråd. Hvis alle cykler indeholder<br />
en nedadstigende tråd, returneres samtlige fundne mulige cykler.<br />
7 Eksperimentelle resultater<br />
7.1 Testprogrammer<br />
Det udviklede program verificeres ved afprøvning med en række test-suiter,<br />
der skal klarlægge termination for eksempelprogrammer. For at have en reference<br />
at sammenligne resulteter med, hentes disse test-suiter fra kendte kilder.<br />
Der er her tale om [POPL01] og dele af Wahlstedt og Glenstrup suiterne fra<br />
[Frederiksen].<br />
Der er dog problemer i dette, idet disse programmer ofte benytter lister, en<br />
datatype der ikke findes i vores sprog. Løsningen består i at transformere programmerne<br />
til en lignende funktionalitet der benytter heltal. Som eksempel kan<br />
nævnes equal funktionen. Hvor den før testede om to lister var ens (indeholdt<br />
de samme elementer), tester den nu om to tal er ens. Det tilstræbes at holde<br />
virkemåden så tæt på det oprindelige program som muligt. Det hænder at de<br />
16