25.09.2013 Views

Size-change grafer

Size-change grafer

Size-change grafer

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!