Indhold 1 Compilerens opbygning 2 Leksikalsk analyse 3 Grammatikker 4 LL-parsing 5 LR-parsing 6 Det abstrakte syntaks-træ 7 Attribut-grammatikker

Størrelse: px
Starte visningen fra side:

Download "Indhold 1 Compilerens opbygning 2 Leksikalsk analyse 3 Grammatikker 4 LL-parsing 5 LR-parsing 6 Det abstrakte syntaks-træ 7 Attribut-grammatikker"

Transkript

1 Indhold 1 Compilerens opbygning Compilerensfunktion Fasericompileringen TinyogC Leksikalsk analyse Strengeogsprog Regulæreudtryk Deterministiskeendeligeautomater Non-deterministiskeendeligeautomater FraregulærtudtryktilNFA FraNFAtilDFA FraDFAtilregulærtudtryk Lexer-generatorer Grammatikker Begrundelse Grammatikker Engrammatikforaritmetiskeudtryk EngrammatikforTiny Andrespecifikationerafgrammatikker LL-parsing Recursivedescent LL(1)-parseren First-ogfollow-mængder LR-parsing Bottom-upparsing LR(0)-parsing SLR(1)-parsing LR(1)-parsing LALR(1)-parsing Parsingaftvetydigegrammatikker Det abstrakte syntaks-træ Parsergeneratorer Detabstraktesyntakstræ ImplementeringafAST Semantiskehandlinger TraverseringafAST Attribut-grammatikker Attributter og attribut-grammatikker Synthetiserede og nedarvede attributter Algoritmer til beregning af attributter

2 8 Symboltabellen Scopeoglevetid Implementeringafsymboltabellen D Typer og typecheck Simpledatatyper Enumererededatatyper Arrays,recordsogpointere Objekter Assignments Typecheck Procedurer Hukommelsensorganisering Fuldtstatiskekøretidsomgivelser Stak-baseredekøretidsomgivelser Stak-baseredekøretidsomgivelsermed lokaleprocedurer Fuldtdynamiskekøretidsomgivelser Parameteroverførselsmekanismer RISC-ogCISC-processorer Mellemrepræsentationen Begrundelseformellemrepræsentationen Instruktioneri3AC Udtryki3AC Kontrolstrukturerogprocedurekald i3ac Datatyperi3AC Implementeringaf3AC Kodegenerering RISC-processorer CISC-processorer Javasvirtuellemaskine Registerallokering Ideenbagregisterallokering Levetidsanalyse Opbygningafinterferens-grafen Farvningafinterferens-grafen Optimering af kode Overblik Foldning af konstanter og konstant-propagation Kopi-propagation Eliminationafdød kode Fællesdeludtryk Løkke-invarianter Reduktionistyrke Løsninger til udvalgte opgaver 154 2

3 Litteratur 168 3

4 1 Compilerens opbygning Vi skal i dette skrift se på, hvorledes en compiler fungerer og på, hvorledes den kan implementeres. Vi starter derfor meden kort oversigt over, hvaden compiler faktisk gør. 1.1 Compilerens funktion En typisk compiler modtager et program, f.eks. et C++-program, i den ene ende og producerer en binær, eksekverbar fil i den anden. Faktisk gemmer der sig i ovenstående sætning to formål meden compiler: 1) Compileren skal, for et korrekt kildeprogram, producere den tilsvarende, korrekte eksekverbare fil 2) Compileren skal kunne detektere eventuelle fejl i kildekoden, gøre opmærksom på disse fejl, og undlade at producere en eksekverbar fil, hvis der faktisk var fejl Ordet korrekt er her meget vigtigt. Det ville være katastrofalt, hvis compileren bare spiste alt det, man fodrede den med og, i tilfælde af fejl, spyttede noget sludder ud igen det ville være alt for nemt at komme til at anvende den ukorrekte, eksekverbare fil til et eller andet. Endelig er man naturligvis interesseret i, at resultatet den eksekverbare fil er så hurtig, så effektiv som mulig. Men dette må siges at være et sekundært mål. Compiler-teknologi anvendes faktisk også i en lang række af andre typer programmer. Mest nærliggende er det nok at se på oversættere, dvs. programmer, der oversætter en fil i en repræsentation til en fil i en anden repræsentation. Således indeholder de fleste tekstbehandlingsprogrammer mulighedfor at kunne læse og skrive filer i adskillige filformater. Ofte er det rimeligt trivielt at transformere tekst fra et format til et andet, men i mange tilfælde får man brug for større eller mindre dele af en compiler. Med udbredelsen af XML vil det blive almindeligt med programmer, der kan transformere fra et XML-format til et andet. XML har en så kompliceret struktur, at her har man brug for en parser for at kunne gennemføre disse transformationer. Men compilerteori anvendes også i enhver browser. En browser er i virkeligheden at opfatte som en compiler, der modtager et HTML-dokument, og oversætter dette. Outputtet er ikke eksekverbar kode, men derimod grafik på en skærm. Brugere af L A TEX vil også være vant til, at L A TEX modtager en kildekode-fil, som så oversættes til grafik på skærmen eller papiret. I begge tilfælde anvendes der algoritmer og metodikker fra compilerteorien. 1.2 Faser i compileringen En compiler er et meget stort og kompliceret program, og for at reducere kompleksiteten er det en fordel at kunne modularisere compileren. Det viser sig at være nemt at lave denne opdeling, idet compileringsprocessen naturligt kan opdeles i en række faser. Gennem tiderne har man fået analyseret sig frem til følgende faser i compileringen: 4

5 1) Leksikalsk analyse 2) Syntaktisk analyse 3) Semantisk analyse 4) Generering af mellemrepræsentationen 5) Optimering af mellemrepræsentationen 6) Generering og optimering af målkoden leksikalsk analyse syntaktisk analyse semantisk analyse gen. af mellemrep optimering kildekode tokens det abstrakte syntakstræ dekoreret abstrakt syntakstræ mellemrepræsentation kodegenerering mellemrepræsentation målkode Figur 1 Hver enkelt fase modtager et input og leverer et output se figur 1 for en grafisk oversigt. Inden vi gennemgår de enkelte faser, skal der defineres nogle begreber: De tre første faser i compileringen kaldes analysen, eller compilerens front-end. I disse faser undersøges kildekodens opbygning, der tjekkes for en lang række fejl, og hvis de ikke findes, ender vi op med det dekorerede abstrakte syntakstræ, som er en (mere eller mindre) abstrakt beskrivelse af kildekoden. 5

6 De tre sidste faser er syntesen eller compilerens back-end. Her genereres, i flere trin, målkoden eller den eksekverbare fil ud fra det dekorerede, abstrakte syntakstræ. To andre begreber, som det er vigtigt at skelne imellem, er syntaks og semantik. Syntaksen for en stump kildekode henviser til den grammatiske opbygning af kildekoden, mens semantikken refererer til selve betydningen af kildekoden. F.eks. har følgende tre sætninger: = 4, Summen af tallene 2 og 2 er 4, Man får resultatet 4, når man plusser 2 og 2 en meget forskellig syntaks, men semantikken er den samme. I princippet er der ingen sammenhæng mellem syntaks og semantik, men da det i virkeligheden er meget svært algoritmisk at kunne finde semantikken af en vilkårlig sætning, vælger man indenfor compilerteorien af arbejde med syntaks-styret semantik. Dette betyder, at man nemt kan afgøre semantikken af et program udfra syntaksen af programmet samt de semantiske regler for programmeringssproget. Man opnår herved, at betydningen af et program bliver klar så klar, at en computer kan arbejde med den men prisen, man betaler, er, at programmeringssproget bliver meget ufleksibelt i forholdtil daglig tale. I den første fase af compileringen, den leksikalske analyse, opdeles kildekoden i et antal tokens, og overflødig information smides væk. Et token er en størrelse, som repræsenterer et symbol, et reserveret ord, en identifier eller lignende. Betragt f.eks. følgende stump Java-kode: public static void main(string[] args) { // dette er en kommentar if (x == 34) y++; Lexeren vil opdele dette i følgende tokens: public static identifier(void) identifier(main) lparen identifier(string) lbracket rbracket identifier(args) rparen if lparen identifier(x) equals numeral(34) rparen identifier(y) increment semicolon rbrace De fleste tokens svarer til reserverede ord eller symboler i Java, men f.eks. increment er et token, der svarer til symbolkombinationen ++. Andre tokens svarer til identifiers navne på metoder, variable etc. eller til literale værdier i programmet, f.eks. tallet 34. Kommentarer og white spaces som mellemrum, linieskift eller tabulatorspring ignoreres, da de ikke har videre betydning for compileringen. I den næste fase, den syntaktiske analyse eller parsingen, sættes de forskellige tokens sammen i det abstrakte syntakstræ. Ideen er her at få opbygget en todimensional repræsentation af programmet finde ud af, hvilke statements der hører til hvilken metode, undersøge, hvornår en løkke-struktur starter og slutter, etc. Både den leksikalske og den syntaktiske analyse er blevet undersøgt intenst gennem de sidste 50 år. Dette betyder, at der findes en række sofistikerede algoritmer, som man skal sætte sig ind i. Heldigvis betyder dette også, at disse faser er forstået så godt, at de kan automatiseres... 6

7 I den semantiske analyse tilføjer vi ekstra information til den abstrakte syntakstræ vi dekorerer det. Denne information er af semantisk karakter vi skal bl.a. have fundet ud af, hvilke variable, der anvendes i programmet, hvilke typer de har, og hvor i programmet de er synlige. Vi skal også have foretaget det såkaldte typecheck. Her undersøger vi, om samtlige assignments, sammenligninger og metodekald er lovlige man kan f.eks. ikke på fornuftig vis multiplicere en boolean meden char. Efter den semantiske analyse er vi nu færdige med analyse-delen af compileren, og vi har det dekorerede, abstrakte syntakstræ for et korrekt program hvis vi da ikke konstaterede nogle fejl undervejs. Næste fase er en oversættelse af det abstrakte syntakstræ til mellemrepræsentationen. Da vi i sidste ende skal have genereret noget maskinkode, skal vi på et eller andet tidspunkt have transformeret høj-niveau-konstruktioner i kildekoden, som f.eks. en for-sætning, til nogle lavniveau-konstruktioner, som en CPU faktisk kan udføre, f.eks. sammenligninger og betingede hop. Det viser sig at være smart ikke allerede nu at generere den konkrete maskinkode dette vil komme til at afhænge alt for meget af mål-cpu ens særheder. I stedet vælger man at transformere til en form for abstrakt maskinkode, mellemrepræsentationen, som man derefter kan arbejde videre med. Vi skal se på flere forskellige former for mellemrepræsentation, men især anvende den såkaldte three adress code. Dernæst skal mellemrepræsentationen optimeres, og endelig genererer vi den konkrete maskinkode, målkoden. Vi vil dog snyde lidt og ikke generere målkode direkte til vores mål-cpu, men nøjes med at generere assembler-kode. Denne skal så assembles en ekstra gang. 1.3 Tiny og C- Vi vil anvende to sprog som eksempel på, hvorledes man kan implementere en compiler, nemlig Tiny og C-. Begge sprog er taget fra [Lou]. Tiny er, som navnet antyder, et meget simpelt sprog. I sin syntaks minder det meget om Pascal. I Tiny kan man kun arbejde med hele tal, og der findes ikke procedurer eller funktioner. Tiny indeholder kun statements som if, if-else, repeat-until, read, write og assignments. Et eksempel på et Tiny-program er følgende: read x; if x > 0 then fact := 1; repeat fact := fact * x; x := x - 1; until x = 0; write fact end Sin simpelhed til trods er Tiny komplekst nok til, at det ikke er en helt triviel opgave at skrive en compiler til Tiny. 7

8 C- er en simplificeret variant af C. Man kan i C- arbejde med hele tal, arrays af hele tal, funktioner, procedurer også rekursive funktioner og procedurer lokale og globale variable. Der er statements som if, if-else og while. Et eksempel på et program skrevet i C- er: int fact( int x ) { /* recursive factorial function */ if (x>1) return x*fact(x-1); else return 1; void main( void ) { int x; x = read(); if (x>0) write (fact (x)); 8

9 2 Leksikalsk analyse Vi går straks i gang med den første fase i compileringen, nemlig den leksikalske analyse. Formålet med den leksikalske analyse er dels at få selve kildekoden opdelt i tokens: Reserverede ord, identifiers, literale strenge og tal-konstanter, symboler etc., og dels at få fjernet symboler, der i virkeligheden er irrelevante for compileringen, f.eks. white spaces som mellemrum og linieskift, samt kommentarer. Outputtet af denne fase er en sekvens af tokens, som leveres videre til parsingen, compileringens næste fase. Vi skal i det følgende se på, hvorledes de forskellige tokens kan specificeres dette sker vedde såkaldte regulære udtryk og vi skal undersøge de konkrete algoritmer, hvorved opsplitningen i tokens foregår. Herunder kommer vi ind på d e såkaldte endelige automater. Endelig ser vi på ensåkaldt lexer-generator, JLex, som er et program, der ud fra en liste af regulære udtryk skriver programkoden til en færdig lexer. Materialet i dette kapitel er at finde i stort set alle bøger om compilerteori, f.eks. [ASU], [Lou] eller [App]. Endvidere indeholder [Sip] en mere formalistisk gennemgang af teorien for regulære udtryk og endelige automater. 2.1 Strenge og sprog Det grundlæggende begreb indenfor sprogteorien er strengen. Viskalnusekortpå, hvorledes strenge og sprog kan defineres formelt: Et alfabet er en endelig mængde af symboler. Vi betegner ofte alfabetet ved Σ. Som regel afhænger valgte af alfabet af, hvilken situation vi er i. Snakker vi om sproget dansk, så er alfabetet mængden {a, b, c,..., x, y, z, æ, ø, å. I de fleste programmeringssprog, som f.eks. C++ og Pascal, anvendes alfabetet ASCII i hvert tilfælde så længe vi er i den leksikalske analyse. (Under den syntaktiske analyse er vores alfabet lig medmængden af tokens) En streng x over alfabetet Σ er en endelig sekvens af symboler fra Σ. Den tomme streng er en streng bestående af 0 symboler og betegnes ofte ɛ. Længden af strengen x er lig medantallet af symboler i symbolsekvensen x og betegnes x. Konkatenationen af strengene x = a 1 a 2...a m og y = b 1 b 2...b n er strengen x y = a 1 a 2...a m b 1 b 2...b n Ofte skriver vi xy i stedet for x y. (I de fleste programmeringssprog, som f.eks. Java, angives konkatenation ved symbolet +. Vi vælger dog at anvende i stedet, idet plus-symbolet også optræder med andre betydninger senere.) Mængden af strenge over Σ betegnes Σ. Eksempel 1 Lados betragte alfabetet Σ = {a, b. Nedenfor er angivet nogle strenge fra Σ : aababbbb = a 2 bab 4, aaaaa = a 5,ɛ Bemærk, at vi anvender multiplikativ (eksponentiel) skrivemåde for strenge. Længderne af disse tre strenge er henholdsvis 8, 5 og 0. 9

10 Definition 2 Et sprog over alfabetet Σ er en mængde af strenge over Σ, dvs. en delmængde af Σ. Sagt på enandenmåde et sprog består af en række strenge, som er lovlige. F.eks. indeholder sproget dansk strengene hest, bro og oversætter, men ikke strengene aslglkahf eller xzxzxzxzxzxz. Sprog kan defineres på adskillige måder enten direkte, vha. brug af mængdebyggernotationen, rekursivt vha. grammatikker, eller vha. regulære udtryk. Vi vil i de følgende kapitler se nærmere på disse definitionsmåder. 2.2 Regulære udtryk Vi skal nu se på regulæreudtrykogpå, hvorledes disse kan definere sprog. Vi starter med at betragte nogle operationer, hvorvedvi kan danne nye sprog udfra gamle: Definition 3 Lad L og M være sprog over alfabetet Σ. Så defineres a) Foreningsmængden L M = {x Σ x L eller x M b) Konkatenationen L M = {x Σ x kan skrives som lm med l L og m M c) Lukningen L = {ɛ L L 2 L 3...= i=0 Li Sagtiord:Ved L M vælger man en streng fra enten L eller M, vedlm tager vi en vilkårlig streng fra L og konkatenerer meden vilkårlig streng fra M, ogvedl konkatenerer vi et vilkårligt antal strenge fra L. Da sprog er mængder, så kan vi naturligvis også tage fællesmængder, mængdedifferenser og komplementærmængder, men disse operationer spiller ingen rolle i sprogteorien. Lados give et eksempel på lukningen af et sprog: Eksempel 4 Betragt Σ = {a, b. {a, b er mængden af alle mulige strenge, som kun består af a og b. {ab er mængden {(ab)n n N 0 Vi kan nu definere et regulært udtryk ved følgende rekursive definition: Definition 5 Et regulært udtryk R over alfabetet Σ er af en af følgende former: a) a for et vilkårligt symbol a Σ b) ɛ, den tomme streng c) R S, hvorr og S er regulære udtryk d) R S, hvorr og S er regulære udtryk e) R,hvorR er et regulært udtryk 10

11 Ligesom ved aritmetiske udtryk undlader man helst parenteser dette kræver, at de tre operationer, og sættes indi et operator-hierarki. Vi vælger at lade have højst prioritet, dernæst kommer, og får så laveste prioritet. (Sammenlign medpotensopløftning, med multiplikation og med addition). Eksempel 6 Betragt udtrykket a (ab ɛ) (ab) a. Dette er et regulært udtryk, og den nemmeste måde at se dette på er at opbygge udtrykket fra bunden i et såkaldt syntakstræ. I bladene i dette træ står der kun symboler fra Σ eller ɛ, og i de indre knuder står der enten, eller ; vi taler her om stjerne-, konkatenation- og streg-knuder. En stjerne-knude har kun en efterfølger, mens de to andre typer indre knuder altid har to efterfølgere. Træetervistpåfigur2... * * * a.. a a b a b Figur 2 Til et regulært udtryk R kan vi tilknytte et sprog, L(R). Dette er igen defineret rekursivt: Definition 7 a) Hvis R = a, såerl(r) ={a b) Hvis R = ɛ, såerl(r) ={ɛ c) Hvis R = R 1 R 2,såerL(R) =L(R 1 ) L(R 2 ) d)hvisr = R 1 R 2,såerL(R) =L(R 1 ) L(R 2 ) e) Hvis R = R 1,såerL(R) =L(R 1 ) Sagt på enandenmåde: I et regulært udtryk betyder valg, konkatenation, og * et vilkårligt antal gentagelser. Eksempel 8 Nogle regulære sprog over alfabetet Σ = {a, b er 1) L(a ba )={w Σ w indeholder netop et b 11

12 2) L((a b) b(a b) )={w Σ w indeholder mindst ét b 3) L((a b) aab(a b) )={w Σ w indeholder delstrengen aab 4) L(((a b)(a b)) )={w Σ w indeholder et lige antal karakterer 5) L(((a b)(a b)(a b)) )={w Σ w er et multiplum af 3 6) L(ab ba) ={ab, ba 7) L(a(a b) a b(a b) b)={w Σ w begynder og ender med samme symbol 8) L((a ɛ)b )=L(ab b )={ab n n 0 {b n n 0 9) L((a ɛ)(b ɛ)) = {ɛ, a, b, ab 2.3 Deterministiske endelige automater Vi skal nu beskrive genkendelsesmaskiner for regulære udtryk, nemlig de såkaldte endelige automater. Endelige automater forekommer i to varianter, deterministiske og non-deterministiske, og vi beskriver først de deterministiske automater: Eksempel 9 a b a b a,b Figur 3 På figur 3 ovenfor er vist en deterministisk endelig automat. Den består af tre tilstande hver cirkel angiver en tilstand. Tilstanden 1 er starttilstanden, hvilket man kan se på den indkommende pil fra venstre. Tilstand 2 er en sluttilstand, og den tilsvarende cirkel er derfor fedt optrukket. Mellem tilstandene er der overgange, symboliseret vedpilene. Til hver overgang er der tilknyttet et symbol, hvilket betyder, at overgangen kun er tilladt, hvis det pågældende symbol er forrest i den streng, vi er ved at behandle. Lados fodre automaten medstrengen abbab. Vi starter i tilstand 1, og da det første symbol i strengen er et a, udfører vi overgangen fra 1 til 1, hvorved a et spises, og vi har nu strengen bbab tilbage. Det forreste b fører os over i tilstand2, og endnu et b fører os fra tilstand2 til tilstand2. Den resterende streng er nu ab, og vi går fra tilstand2 til tilstand 3, og det sidste b fører os tilbage til tilstand 2. Da vi ender i en sluttilstand, så har automaten accepteret strengen abbab. Vi kan også fodre automaten med aabba. Vi bevæger os så imellem tilstandene i rækkefølgen , og da vi ikke ender i sluttilstanden 2, så accepterer automaten ikke strengen aabba. Lad os angive den formelle definition af en deterministisk endelig automat forkortet DFA (Deterministic Finite Automaton): Definition 10 En deterministisk endelig automat består af størrelserne (Q, Σ,δ,q 0,F),hvor Q er en endelig mængde af tilstande 12

13 Σ er et alfabet δ : Q Σ Q er overgangsfunktionen q 0 Q er begyndelsestilstanden F Q er mængden af sluttilstande Automaten virker på en streng s = a 0 a 1...a n af symboler fra Σ således: Vi danner en sekvens af tilstande q 0,q 1,q 2,...,q n,q n+1 ved q 1 = δ(q 0,a 0 ),q 2 = δ(q 1,a 1 )...,q n+1 = δ(q n,a n ) Automaten accepterer strengen, hvis q n+1 F. Vi er specielt interesseret i mængden af de strenge, som accepteres af en given DFA. Som vi senere skal se, kan vi til ethvert regulært sprog konstruere en DFA, som netop accepterer strengene i sproget, og omvendt er et sprog, som accepteres af en DFA altid et regulært sprog. Regulære sprog (eller regulære udtryk) og endelige automater er derfor i virkeligheden to sider af samme sag. Eksempel 11 Lados beskrive DFA en fra eksempel 9 formelt: Mængden af tilstande er Q = {1, 2, 3, og alfabetet er Σ = {a, b. Det er nemmest at angive overgangsfunktionen veden tabel: a b Starttilstanden er q 0 = 1, og sluttilstandene er F = {2. Det regulære udtryk, der accepteres af automaten, er givet ved a b((aa ab) b ).Lad os argumentere for dette: For at komme fra starttilstanden 1 til sluttilstanden 2 skal vi først gennemløbe et antal a er og dernæst netop ét b. Dette betyder, at vores streng skal starte med a b. Vi er nu i sluttilstanden 2, og kan komme tilbage hertil ved enten at tage nogle b-ture eller, via tilstand3, (aa ab)-ture. Da disse kan komme i vilkårlig rækkefølge, svarer dette til ((aa ab) b ),ogtilsammenfår vi altså resultatet a b((aa ab) b ). Vi skal senere se en generel algoritme til at rekonstruere det regulære udtryk ud fra DFA en. Det er ikke altid, at man angiver en overgang fra en tilstand for alle symboler i alfabetet. I dette tilfælde accepteres en streng ikke, hvis man pludselig kommer ud for en overgang, der ikke findes: Eksempel 12 Betragt DFA en på figur 4. Det ses, at når automaten først når nedi tilstanden 4, så kan den aldrig slippe væk igen vi kalder tilstand 4 for en fælde. Vi kunne derfor ligeså godt anvende automaten på figur 5. Her er fælde-tilstanden 4 udeladt, og vi får en meget simplere figur. 13

14 a a b b b a 4 a,b Figur 4 a a b b Figur Non-deterministiske endelige automater En variant af den deterministiske endelige automat er den non-deterministiske endelige automat forkortet NFA (Non-deterministic Finite Automaton). I en NFA kan der være flere forskellige overgange ud fra den samme tilstand med det samme symbol, og der kan tilmed være overgange, som kan finde sted spontant uden at spise et symbol fra strengen de såkaldte ɛ-overgange. Som følge heraf kan vi ikke sige, at NFA en er i en bestemt tilstand, men derimod i en mængde af tilstande samtidigt. Eksempel 13 a,b 1 b 2 a, 3 Figur 6 b a,b 4 På figur 6 er vist en NFA. Den har 4 tilstande, hvoraf 1 er starttilstanden og 4 er en sluttilstand. Det er en non-deterministisk automat, da f.eks. tilstand 1 har to b-overgange udfra sig, og der er en ɛ-overgang mellem tilstand2 og 3. Lad os fodre denne automat med strengen ababba. Til at begynde med er vi kun i starttilstanden 1, og efter at have spist det første a kan vi kun stadigvæk være i tilstand 1. Nu kommer et b, og herefter er vi i tilstand1 eller 2. Men automaten kan spontant spise et ɛ altså ingenting og ende i tilstand 3, så vieraltså i tilstandene 1, 2 eller 3. Endnu et a, og tilstand1 forbliver tilstand1, tilstand2 bliver til tilstand3, og da der ingen a-overgange er fra tilstand 3, dør denne. Vi er altså i tilstand1 eller 3. Så kommer et b, ogvienderitilstandene1,2,3og4.endnuetb, og vi er igen i 1, 2, 3 og 4. Endelig kommer det sidste a, som fører os over i tilstandene 1, 3 eller 4. Da tilstand 4 er en sluttilstand, så accepterede automaten strengen. 14

15 Vi vil ikke give en formel definition af en NFA, da denne definition nok vil forvirre mere, endden forklarer. Heldigvis anvender man sjældent NFA er i praksis det viser sig, at de er komplicerede at implementere, og endvidere er udførelsestiden høj: Har automaten m tilstande, så tager det for en streng med længde n tiden O(mn) at se, om strengen accepteres. For en DFA er situationen meget bedre her tager det kun tiden O(n). Men NFA er spiller en vigtig rolle inden for den videre teori. 2.5 Fra regulært udtryk til NFA Der gælder følgende resultat: Sætning 14 Til enhver NFA findes der en DFA, som accepterer det samme sprog. Et sprog er regulært, hvis og kun hvis der findes en DFA, som accepterer det. Vi vil ikke bevise denne sætning, men i stedet eksemplificere den ved et par eksempler. Gennemfører man faktisk beviset, så skal man anvende følgende strategi: a) Beskriv en algoritme, som tildeler en NFA til et regulært udtryk. b) Beskriv en algoritme, som kan omdanne en NFA til en DFA c) Beskriv en algoritme, som, givet en DFA, kan fortælle, hvilket regulært udtryk, der accepteres af denne. I den første algoritme husker man på, at et regulært udtryk er defineret rekursivt: a (for a Σ) og ɛ er regulære udtryk, og hvis R og S er regulære udtryk, så err S, R S og R det også. Det er nemt at konstruere automater for udtrykkene a og ɛ sefigur7 Antag nu, at vi har konstrueret non-deterministiske automater for udtrykkene R og S således, at disse kun har en sluttilstand. Som figur 7 viser, kan vi konstruere en ny nondeterministisk automat for R S, for R S og for R. Eksempel 15 Lados konstruere en NFA for udtrykket (a b) abb. Dette gøres nemt medalgoritmen fra før. Nogle af trinene på vejen er vist på nedenstående figur 8: Den færdige automat er vist nederst på figur 8. Som det ses, er der masser af ɛ- overgange, der jo kun er til besvær. Det er derfor en fordel at kunne lave denne NFA om til en DFA. 2.6 Fra NFA til DFA Når man skal transformere en NFA til en DFA er det en god ide at huske på, at en tilstandi en NFA i virkeligheden er en mængde af tilstande. Vi kan således lave en NFA om til en DFA ved at tage samtlige delmængder af tilstande i NFA en og lade disse være tilstandene i den nye DFA. 15

16 a a R R S S RS R S R* R Figur 7 16

17 a ab b a b b abb a ( )* ab b a 3 4 ( )* a b abb 1 2 a b b b 6 Figur 8 17

18 Dette viser sig dog ikke at være så smart, da der for en NFA med n tilstande kommer en DFA med2 n tilstande og de fleste af disse kommer vi aldrig i berøring med. I stedet for opbygger man langsomt DFA en tilstandfor tilstand. I denne forbindelse får man brug for begrebet ɛ-lukning: Definition 16 Betragt en NFA, og en mængde T af tilstande i denne NFA. ɛ-lukningen ɛ(t ) defineres som den delmængde af tilstande, som kan nås fra T kun ved ɛ-overgange. Eksempel 17 Betragt NFA en fra figur 8. ɛ-lukningen af mængden {7 er ɛ({7) ={2, 3, 5, 7, 8. Vi kan nu beskrive, hvorledes man transformerer en NFA til en DFA: Den første tilstandi DFA en er mængden ɛ({q 0 ) altså ɛ-lukningen af starttilstanden. ForhverenestetilstandS = s 1,s 2,...,s n idfa enogsymbola i alfabetet finder vi en (måske ny) tilstandsom ɛ-lukningen P af foreningsmængden δ(s 1,a) δ(s 2,a) δ(s n,a). Vi finder altså mængden af NFA-tilstande, som vi kan nå fra S vha. a-overgange, og ɛ-lukker denne. Samtidigt med, at vi opbygger nye tilstande finder vi også overgangstabellen for DFA en: Symbolet a fører fra tilstand S til tilstand P ovenfor. Denne proces fortsætter, indtil vi har fundet overgangstabellen for alle overgange, og der ikke opstår nye tilstande. Eksempel 18 Lados konstruere DFA en svarende til NFA en fra figur 6. Vores starttilstander A = ɛ({1) ={1, 2, 3, 5, 8. Denne tilstandgiver to nye, nemlig og δ(a, a) =ɛ({4, 9) ={2, 3, 4, 5, 7, 8, 9 = B δ(a, b) =ɛ({6) ={2, 3, 5, 6, 7, 8 = C Vi fortsætter med B og C: δ(b,a) =ɛ({4, 9) ={2, 3, 4, 5, 7, 8, 9 = B δ(b,b) =ɛ({6, 10) ={2, 3, 5, 6, 7, 8, 10 = D δ(c, a) =ɛ({4, 9) ={2, 3, 4, 5, 7, 8, 9 = B δ(c, b) =ɛ({6) ={2, 3, 5, 6, 7, 8 = C Vi har en ny tilstand D: δ(d, a) =ɛ({4, 9) ={2, 3, 4, 5, 7, 8, 9 = B δ(d, b) =ɛ({6, 11) ={2, 3, 5, 6, 7, 8 = E 18

19 Den nye tilstand E tages kærligt under behandling: δ(e,a)=ɛ({4, 9) ={2, 3, 4, 5, 7, 8, 9 = B δ(e,b)=ɛ({6) ={2, 3, 5, 6, 7, 8 = C Hurra, vi har ikke flere tilstande, og er derfor færdige! Da E er den eneste tilstand, der indeholder den gamle sluttilstand 11, så ere den eneste sluttilstand. Selve overgangstabellen for DFA en er: DFA en er vist på figur9. a b A = {1, 2, 3, 5, 8 B C B = {2, 3, 4, 5, 7, 8, 9 B D C = {2, 3, 5, 6, 7, 8 B C D = {2, 3, 5, 6, 7, 8, 10 B E E = {2, 3, 5, 6, 7, 8, 11 B C C b A b a a B a b a b D a b E Figur Fra DFA til regulært udtryk Vi skal nu se, hvorledes man kan rekonstruere det regulære udtryk ud fra en DFA (eller en NFA). Metoden illustreres med et eksempel: Eksempel 19 Betragt automaten til venstre på figur 10. Vi vil finde det tilsvarende regulære udtryk: Først tilføjer vi en ny starttilstand, B, og en ny sluttilstand S, og ɛ-overgange, så automaten accepterer de samme strenge som før. Ideen er nu at fjerne tilstandene 1, 2 og 3 én efter én, og tilsvarende modificere overgangene, indtil vi kun har B og S tilbage. Vi kan så aflæse det regulære udtryk direkte. Vi fjerner først tilstand1. Dette kræver, at vi laver nye overgange eller modificerer allerede eksisterende overgange mellem samtlige tilstande, som er forbundet via tilstand1. Da B, 2 og 3 sender overgange ind til 1, og 2 og 3 modtager overgange fra 1, såskalvialtså modificere overgangene B 2, B 3, 2 2, 2 3, 3 2og

20 a b 1 a 2 B a b 1 a 2 b b 3 a b b 3 a S B b 3 a ab 2 ba a aa b S B a( aa b)* ab b aaab ( )* 3 S ( ba a)( aa b)* bb ( ba a)( aa b)* ab bb B ( a( aa b)* ab b)(( ba a)( aa b)* ab bb)*(( ba a)( aa b)* ) a( aa b)* Figur 10 Der er ingen oprindelig overgang fra B til 2, og den kombinerede overgang fra B via 1til2svarertilkonkatenationenɛa = a. Tilsvarende fås en overgang fra B til3med værdien ɛb = b. Fra2til2erderalleredeovergangenmed værdienb. Vifår nu en ny nemlig fra 2 via 1 til 2. Denne giver værdien aa, ogdennyeovergangfra2til2får altså værdienaa b. Tilsvarende gælder for de tre sidste overgange, og vi får den tredie automat på figuren. Vi fjerner nu tilstanden 2. Her er der en komplikation, idet der findes en løkke en overgang fra 2 til sig selv. Denne giver anledning til et mellemled af formen (aa b) ide nye overgange. En af de nye overgange går fra B til S, ogdenfår værdien a(aa b) ɛ = a(aa b). Efter at have elimineret tilstand 3 kan vi direkte aflæse, at automaten svarer til det regulære udtryk (a(aa b) ab b)((ba a)(aa b) ab bb) ((ba a)(aa b) ɛ) a(aa b) Dette kan formentligt omskrives til noget simplere... Denne algoritme er i praksis af begrænset værdi som regel ønsker man at konstruere en endelig automat ud fra et givet regulært udtryk, ikke omvendt. 2.8 Lexer-generatorer I praksis vil man ikke implementere endelige automater for at få foretaget sin leksikalske analyse. I stedet anvender man en såkaldt lexer-generator et program, som fodres med de 20 S

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser 3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse

Læs mere

En karakteristik af de regulære sprog. Ugens emner. FA minimering [5.1-5.2] MyHill-Nerode-sætningen en algoritme til minimering af FA er

En karakteristik af de regulære sprog. Ugens emner. FA minimering [5.1-5.2] MyHill-Nerode-sætningen en algoritme til minimering af FA er Ugens emner FA minimering [.-.] MyHill-Nerode-sætningen en algoritme til minimering af FA er En karakteristik af de regulære sprog Et sprog L er regulært hvis og kun hvis L beskrives af et regulært udtryk

Læs mere

Grundlæggende Matematik

Grundlæggende Matematik Grundlæggende Matematik Hayati Balo, AAMS August 2012 1. Matematiske symboler For at udtrykke de verbale udsagn matematisk korrekt, så det bliver lettere og hurtigere at skrive, indføres en række matematiske

Læs mere

Regularitet og Automater

Regularitet og Automater Plan dregaut 2007 Regularitet og Automater Hvad er Regularitet og Automater? Praktiske oplysninger om kurset Ugens emner Introduktion til ugens opgaver 2 Regularitet og Automater Formål med kurset: at

Læs mere

Skriftlig eksamen, Programmer som Data Onsdag 5. januar 2011

Skriftlig eksamen, Programmer som Data Onsdag 5. januar 2011 Skriftlig eksamen, Programmer som Data Onsdag 5. januar 2011 Version 1.1 af 2011-01-28 Dette eksamenssæt har 7 sider. Tjek med det samme at du har alle siderne. Eksamens varighed er 4 timer. Der er fire

Læs mere

Induktive og rekursive definitioner

Induktive og rekursive definitioner Induktive og rekursive definitioner Denne note omhandler matematiske objekter, som formelt er opbygget fra et antal basale byggesten, kaldet basistilfælde eller blot basis, ved gentagen brug af et antal

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

Invarianter. 1 Paritet. Indhold

Invarianter. 1 Paritet. Indhold Invarianter En invariant er en størrelse der ikke ændrer sig, selv om situationen ændrer sig. I nogle kombinatorikopgaver hvor man skal undersøge hvilke situationer der er mulige, er det ofte en god idé

Læs mere

Algebra. Dennis Pipenbring, 10. februar 2012. matx.dk

Algebra. Dennis Pipenbring, 10. februar 2012. matx.dk matx.dk Algebra Dennis Pipenbring, 10. februar 2012 nøgleord andengradsligning, komplekse tal, ligningsløsning, ligningssystemer, nulreglen, reducering Indhold 1 Forord 4 2 Indledning 5 3 De grundlæggende

Læs mere

APPENDIX A INTRODUKTION TIL DERIVE

APPENDIX A INTRODUKTION TIL DERIVE APPENDIX A INTRODUKTION TIL DERIVE z x y z=exp( x^2 0.5y^2) CAS er en fællesbetegnelse for matematikprogrammer, som foruden numeriske beregninger også kan regne med symboler og formler. Det betyder: Computer

Læs mere

Baggrundsnote om logiske operatorer

Baggrundsnote om logiske operatorer Baggrundsnote om logiske operatorer Man kan regne på udsagn ligesom man kan regne på tal. Regneoperationerne kaldes da logiske operatorer. De tre vigtigste logiske operatorer er NOT, AND og. Den første

Læs mere

Kapitel 2 Tal og variable

Kapitel 2 Tal og variable Tal og variable Uden tal ingen matematik - matematik handler om tal og anvendelse af tal. Matematik beskæftiger sig ikke udelukkende med konkrete problemer fra andre fag, og de konkrete tal fra andre fagområder

Læs mere

Kom i gang med... Kapitel 11 Math: Formelredigering med OpenOffice.org. OpenOffice.org

Kom i gang med... Kapitel 11 Math: Formelredigering med OpenOffice.org. OpenOffice.org Kom i gang med... Kapitel 11 Math: Formelredigering med OpenOffice.org OpenOffice.org Rettigheder Dette dokument er beskyttet af Copyright 2005 til bidragsyderne som er oplistet i afsnittet Forfattere.

Læs mere

Matricer og lineære ligningssystemer

Matricer og lineære ligningssystemer Matricer og lineære ligningssystemer Grete Ridder Ebbesen Virum Gymnasium Indhold 1 Matricer 11 Grundlæggende begreber 1 Regning med matricer 3 13 Kvadratiske matricer og determinant 9 14 Invers matrix

Læs mere

Matematisk induktion

Matematisk induktion Induktionsbeviser MT01.0.07 1 1 Induktionsbeviser Matematisk induktion Sætninger der udtaler sig om hvad der gælder for alle naturlige tal n N, kan undertiden bevises ved matematisk induktion. Idéen bag

Læs mere

BOSK F2012, 1. del: Prædikatslogik

BOSK F2012, 1. del: Prædikatslogik ε > 0. δ > 0. x. x a < δ f (x) L < ε February 8, 2012 Prædikater Vi skal lære om prædikatslogik lad os starte med prædikater. Et prædikat er et orakel der svarer ja eller nej. Eller mere præcist: Prædikater

Læs mere

Programmering i C Intro og grundlæggende C 5. marts 2007

Programmering i C Intro og grundlæggende C 5. marts 2007 Programmering i C Intro og grundlæggende C 5. marts 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk Plan for kurset Ma. 5/3: Ma. 19/3: Ma. 2/4: To. 12/4: Formål, intro, grundlæggende Videre, sprogkonstruktioner

Læs mere

VisiRegn: En e-bro mellem regning og algebra

VisiRegn: En e-bro mellem regning og algebra Artikel i Matematik nr. 2 marts 2001 VisiRegn: En e-bro mellem regning og algebra Inge B. Larsen Siden midten af 80 erne har vi i INFA-projektet arbejdet med at udvikle regne(arks)programmer til skolens

Læs mere

Martin Geisler. Uge 49, 2001

Martin Geisler. Uge 49, 2001 Min dintprog-browser Martin Geisler Uge 49, 2001 Resumé Dette dokument beskriver tankerne bag min dintprog-browser, en browser skrevet i Java der skal kunne fortolke en mindre delmængde af HTML 4, kaldet

Læs mere

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Har en hvis lighed med divide-and-conquer: Begge opbygger løsninger til større problemer

Læs mere

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at

Læs mere

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. 10) til heltal (10). if (udtryk) else Programmering 1999 Forelæsning 2, fredag 3. september 1999 Betingede ordrer: if-, if Indlejrede betingede ordrer Løkker med begrænset iteration: for Løkker med ubegrænset iteration: while Betingede ordrer,

Læs mere

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller.

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller. Flowchart Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller. Et godt program til at tegne flowcharts med er, EDGE-Diagrammer, eller Smartdraw.

Læs mere

Maple. Skærmbilledet. Vi starter med at se lidt nærmere på opstartsbilledet i Maple. Værktøjslinje til indtastningsområdet. Menulinje.

Maple. Skærmbilledet. Vi starter med at se lidt nærmere på opstartsbilledet i Maple. Værktøjslinje til indtastningsområdet. Menulinje. Maple Dette kapitel giver en kort introduktion til hvordan Maple 12 kan benyttes til at løse mange af de opgaver, som man bliver mødt med i matematiktimerne på HHX. Skærmbilledet Vi starter med at se lidt

Læs mere

Om brugen af matematiske tegn og objekter i en god matematisk fremstilling

Om brugen af matematiske tegn og objekter i en god matematisk fremstilling Om brugen af matematiske tegn og objekter i en god matematisk fremstilling af Petur Birgir Petersen Et særpræg ved matematik som videnskab er den udstrakte brug af symboler. Det er vigtigt at symbolerne

Læs mere

Matematikkens mysterier - på et obligatorisk niveau. 1. Basis

Matematikkens mysterier - på et obligatorisk niveau. 1. Basis Matematikkens mysterier - på et obligatorisk niveau af Kenneth Hansen 1. Basis Jorden elektron Hvor mange elektroner svarer Jordens masse til? 1. Basis 1.0 Indledning 1.1 Tal 1. Brøker 1. Reduktioner 11

Læs mere

Spilstrategier. 1 Vindermængde og tabermængde

Spilstrategier. 1 Vindermængde og tabermængde Spilstrategier De spiltyper vi skal se på her, er primært spil af følgende type: Spil der spilles af to spillere A og B som skiftes til at trække, A starter, og hvis man ikke kan trække har man tabt. Der

Læs mere

Seminar 1 Regularitet og Automater 28/1-2012

Seminar 1 Regularitet og Automater 28/1-2012 Seminar 1 Regularitet og Automater 28/1-2012 Jesper Gulmann Henriksen jgh@wincubate.net Agenda Introduktion Hvad er Regularitet og Automater? Praktiske Oplysninger om Kurset Regulære Udtryk + Øvelser Induktion

Læs mere

DATALOGI 1E. Vejledende løsninger til Skriftlig eksamen mandag den 28. maj 2001. 1 60 min. 2 60 min. 3 60 min. 4 60 min.

DATALOGI 1E. Vejledende løsninger til Skriftlig eksamen mandag den 28. maj 2001. 1 60 min. 2 60 min. 3 60 min. 4 60 min. Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Vejledende løsninger til Skriftlig eksamen mandag den 28. maj 2001 Opgaverne vægtes i forhold til tidsangivelsen, og hver opgaves besvarelse

Læs mere

Affine - et krypteringssystem

Affine - et krypteringssystem Affine - et krypteringssystem Matematik, når det er bedst Det Affine Krypteringssystem (Affine Cipher) Det Affine Krypteringssystem er en symmetrisk monoalfabetisk substitutionskode, der er baseret på

Læs mere

Afsnittet er temmelig teoretisk. Er du mere til det praktiske, går du blot til det næste afsnit.

Afsnittet er temmelig teoretisk. Er du mere til det praktiske, går du blot til det næste afsnit. Afsnittet er temmelig teoretisk. Er du mere til det praktiske, går du blot til det næste afsnit. XML (eng. extensible Markup Language) XML er en måde at strukturere data på i tekstform. På samme måde som

Læs mere

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet RSA Kryptosystemet Kryptologi ved Datalogisk Institut, Aarhus Universitet 1 Kryptering med RSA Her følger først en kort opridsning af RSA kryptosystemet, som vi senere skal bruge til at lave digitale signaturer.

Læs mere

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) Efterår 2009 1 Simpel aritmetik på maskinniveau I SCO, appendix A, er det beskrevet, hvordan man adderer ikke-negative heltal

Læs mere

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42 Slide 1/42 Hvad er matematik? 1) Den matematiske metode 2) Hvad vil det sige at bevise noget? 3) Hvor begynder det hele? 4) Hvordan vælger man et sæt aksiomer? Slide 2/42 Indhold 1 2 3 4 Slide 3/42 Mængder

Læs mere

ALMINDELIGT ANVENDTE FUNKTIONER

ALMINDELIGT ANVENDTE FUNKTIONER ALMINDELIGT ANVENDTE FUNKTIONER I dette kapitel gennemgås de almindelige regnefunktioner, samt en række af de mest nødvendige redigerings- og formateringsfunktioner. De øvrige redigerings- og formateringsfunktioner

Læs mere

http://www.fya.byethost13.com/forside.html

http://www.fya.byethost13.com/forside.html I dette dokument forklares den basale brug af TeX, et programmeringssprog velegnet til at skrive matematiske dokumenter i, som det foregår i TeXnicCenter. De programmer, der skal bruges kan findes via

Læs mere

How to do in rows and columns 8

How to do in rows and columns 8 INTRODUKTION TIL REGNEARK Denne artikel handler generelt om, hvad regneark egentlig er, og hvordan det bruges på et principielt plan. Indholdet bør derfor kunne anvendes uden hensyn til, hvilken version

Læs mere

Dynamisk programmering. Flere eksempler

Dynamisk programmering. Flere eksempler Dynamisk programmering Flere eksempler Eksempel 1: Længste fælles delstreng Alfabet = mængde af tegn: {a,b,c,...,z}, {A,C,G,T}, {,1} Streng = sekvens x 1 x 2 x 3... x n af tegn fra et alfabet: helloworld

Læs mere

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides 01017 Diskret Matematik E12 Alle bokse fra logikdelens slides Thomas Bolander 1 Udsagnslogik 1.1 Formler og sandhedstildelinger symbol står for ikke eller og ( A And) hvis... så... hvis og kun hvis...

Læs mere

Boolesk Algebra og det binære talsystem - temahæfte informatik. Oprindelse.

Boolesk Algebra og det binære talsystem - temahæfte informatik. Oprindelse. Boolesk Algebra og det binære talsystem - temahæfte informatik. I dette hæfte arbejdes der med to-tals systemet og logiske udtryk. Vi oplever at de almindelige regneregler også gælder her, og vi prøver

Læs mere

Repræsentation af tal

Repræsentation af tal Repræsentation af tal DM526 Rolf Fagerberg, 2009 Bitmønstre 01101011 0001100101011011... Bitmønstre skal fortolkes for at have en betydning: Tal (heltal, kommatal) Bogstaver Computerinstruktion (program)

Læs mere

Kvadratrodsberegning ved hjælp af de fire regningsarter

Kvadratrodsberegning ved hjælp af de fire regningsarter Kvadratrodsberegning ved hjælp af de fire regningsarter Tidligt i historien opstod et behov for at beregne kvadratrødder med stor nøjagtighed. Kvadratrødder optræder i forbindelse med retvinklede trekanter,

Læs mere

Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010

Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010 Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010 Computere er uvurderlige redskaber for personer der ønsker at arbejde med matematiske modeller

Læs mere

ØVEHÆFTE FOR MATEMATIK C FORMLER OG LIGNINGER

ØVEHÆFTE FOR MATEMATIK C FORMLER OG LIGNINGER ØVEHÆFTE FOR MATEMATIK C FORMLER OG LIGNINGER INDHOLDSFORTEGNELSE 0. FORMELSAMLING TIL FORMLER OG LIGNINGER... 2 Tal, regneoperationer og ligninger... 2 Ligning med + - / hvor x optræder 1 gang... 3 IT-programmer

Læs mere

Talteori. Teori og problemløsning. Indhold. Talteori - Teori og problemløsning, august 2013, Kirsten Rosenkilde.

Talteori. Teori og problemløsning. Indhold. Talteori - Teori og problemløsning, august 2013, Kirsten Rosenkilde. Indhold 1 Delelighed, primtal og primfaktoropløsning Omskrivning vha. kvadratsætninger 4 3 Antal divisorer 6 4 Største fælles divisor og Euklids algoritme 7 5 Restklasser 9 6 Restklasseregning og kvadratiske

Læs mere

1. Opbygning af et regneark

1. Opbygning af et regneark 1. Opbygning af et regneark Et regneark er et skema. Vandrette rækker og lodrette kolonner danner celler, hvori man kan indtaste tal, tekst, datoer og formler. De indtastede tal og data kan bearbejdes

Læs mere

Grundlæggende regneteknik

Grundlæggende regneteknik Grundlæggende regneteknik Anne Ryelund, Mads Friis og Anders Friis 13. november 2014 Indhold Forord Indledning iii iv 1 Regning med brøker 1 1.1 Faktorisering i primtal.............................. 3

Læs mere

Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012. May 15, 2012

Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012. May 15, 2012 Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012 May 15, 2012 1 CONTENTS 2012 CONTENTS Contents 1 Kompleksitet 3 1.1 Køretid................................................ 3 1.2 Asymptotisk

Læs mere

Håndbog Til CPR services. Bilag 8 GCTP-standard m.m. CPR-kontoret

Håndbog Til CPR services. Bilag 8 GCTP-standard m.m. CPR-kontoret Håndbog Til CPR services Bilag 8 GCTP-standard m.m. CPR-kontoret Datavej 20, Postboks 269, 3460 Birkerød E-post: cpr@cpr.dk. Telefax 45 82 51 10. Hjemmeside: www.cpr.dk Side 2 af 14 Indholdsfortegnelse

Læs mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling

Læs mere

Rekursion C#-version

Rekursion C#-version Note til Programmeringsteknologi Akademiuddannn i Informationsteknologi Rekursion C#-version Finn Nordbjerg 1 Rekursion Rekursionsbegrebet bygger på, at man beskriver noget ved "sig selv". Fx. kan tallet

Læs mere

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Programmering Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Oversigt Undervisningen Hvad er programmering Hvordan er et program organiseret? Programmering og fysik Nobelprisen

Læs mere

Poly. - Javapakke til behandling af polynomier

Poly. - Javapakke til behandling af polynomier Poly - Javapakke til behandling af polynomier z 3 x y x 2 3 x -3 Skrevet af Susanne Nykjær Knudsen, John Thystrup Jensen, Jens Lykke Brandt, Troels C. Damgaard, Jacob W. Winther og Mikkel Bundgaard Vejleder:

Læs mere

Projekt - Visual Basic for Applications N på stribe

Projekt - Visual Basic for Applications N på stribe Projekt - Visual Basic for Applications N på stribe Mikkel Kaas og Troels Henriksen - 03x 3. november 2005 1 Introduktion Spillet tager udgangspunkt i det gamle kendte 4 på stribe, dog med den ændring,

Læs mere

Komplekse tal. Mikkel Stouby Petersen 27. februar 2013

Komplekse tal. Mikkel Stouby Petersen 27. februar 2013 Komplekse tal Mikkel Stouby Petersen 27. februar 2013 1 Motivationen Historien om de komplekse tal er i virkeligheden historien om at fjerne forhindringerne og gøre det umulige muligt. For at se det, vil

Læs mere

Noter og opgaver. Programmering A IMADA. Niels Kjeldsen & Jacob Aae Mikkelsen. Med grundig korrektur og rettelser af Edmund Christiansen

Noter og opgaver. Programmering A IMADA. Niels Kjeldsen & Jacob Aae Mikkelsen. Med grundig korrektur og rettelser af Edmund Christiansen Programmering A IMADA Noter og opgaver Niels Kjeldsen & Jacob Aae Mikkelsen Med grundig korrektur og rettelser af Edmund Christiansen Noter til Programmering A INDHOLD Indhold 1 Indledning 3 2 Kom i gang

Læs mere

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) int wmid, wmevent; PAINTSTRUCT Introduktion ps; til HDC hdc; programmering med switch (message) case WM_COMMAND: wmid = LOWORD(wParam);

Læs mere

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo Philip Bille Nærmeste naboer. Vedligehold en dynamisk mængde S af elementer. Hvert element har en nøgle key[] og satellitdata data[]. operationer. PREDECESSOR(k): returner element med største nøgle k.

Læs mere

Kompendium i faget. Matematik. Tømrerafdelingen. 2. Hovedforløb. Y = ax 2 + bx + c. (x,y) Svendborg Erhvervsskole Tømrerafdelingen Niels Mark Aagaard

Kompendium i faget. Matematik. Tømrerafdelingen. 2. Hovedforløb. Y = ax 2 + bx + c. (x,y) Svendborg Erhvervsskole Tømrerafdelingen Niels Mark Aagaard Kompendium i faget Matematik Tømrerafdelingen 2. Hovedforløb. Y Y = ax 2 + bx + c (x,y) X Svendborg Erhvervsskole Tømrerafdelingen Niels Mark Aagaard Indholdsfortegnelse for H2: Undervisningens indhold...

Læs mere

DDD Runde 2, 2015 Facitliste

DDD Runde 2, 2015 Facitliste DDD Runde 2, 2015 Facitliste Søren Dahlgaard og Mathias Bæk Tejs Knudsen Opgaver og løsninger til 2. runde af DDD 2015. 1 4. 19. februar, 2015 linetest DK v1.0 Line Test Sigurd er begyndt i gymnasiet og

Læs mere

Encoding:...1 Et tegn sæt (character set):...1 UTF-8 og UTF-16 (Unicode):...2

Encoding:...1 Et tegn sæt (character set):...1 UTF-8 og UTF-16 (Unicode):...2 Encoding:...1 Et tegn sæt (character set):...1 UTF-8 og UTF-16 (Unicode):...2 Encoding: Vi har tidligere set på spørgsmålet om et XML dokuments encoding. Det er generelt altid en god ide at gemme et dokument

Læs mere

Emneopgave: Lineær- og kvadratisk programmering:

Emneopgave: Lineær- og kvadratisk programmering: Emneopgave: Lineær- og kvadratisk programmering: LINEÆR PROGRAMMERING I lineær programmering løser man problemer hvor man for en bestemt funktion ønsker at finde enten en maksimering eller en minimering

Læs mere

Broer, skak og netværk Carsten Thomassen: Naturens Verden 10, 1992, s. 388-393.

Broer, skak og netværk Carsten Thomassen: Naturens Verden 10, 1992, s. 388-393. Broer, skak og netværk Side 1 af 6 Broer, skak og netværk Carsten Thomassen: Naturens Verden 10, 1992, s. 388-393. Eksempler på praktiske anvendelser af matematik og nogle uløste problemer Indledning Figur

Læs mere

Computerundervisning

Computerundervisning Frederiksberg Seminarium Computerundervisning Koordinatsystemer og Funktioner Lærervejledning 12-02-2009 Udarbejdet af: Pernille Suhr Poulsen Christina Klitlyng Julie Nielsen Indhold Introduktion... 3

Læs mere

Mathcad Survival Guide

Mathcad Survival Guide Mathcad Survival Guide Mathcad er en blanding mellem et tekstbehandlingsprogram (Word), et regneark (Ecel) og en grafisk CAS-lommeregner. Programmet er velegnet til matematikopgaver, fysikrapporter og

Læs mere

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!

Læs mere

Oprids over grundforløbet i matematik

Oprids over grundforløbet i matematik Oprids over grundforløbet i matematik Dette oprids er tænkt som en meget kort gennemgang af de vigtigste hovedpointer vi har gennemgået i grundforløbet i matematik. Det er en kombination af at repetere

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

Crash Course i Programmering. HumTek, RUC

Crash Course i Programmering. HumTek, RUC Crash Course i Programmering HumTek, RUC Kursus mål At give en basal introduktion til programmering i sproget Processing At give et overblik over sprogets potentiale At have det sjovt :-) Kursus form Meget

Læs mere

ITS MP 013. Talsystemer V009. Elevens navn. IT Skolen Boulevarden 19A-C 7100 Vejle Tel.:+45 76 42 62 44

ITS MP 013. Talsystemer V009. Elevens navn. IT Skolen Boulevarden 19A-C 7100 Vejle Tel.:+45 76 42 62 44 ITS MP 013 V009 Elevens navn IT Skolen Boulevarden 19A-C 7100 Vejle Tel.:+45 76 42 62 44 ITS MP 013 Udarbejdet af Søren Haahr, juni 2010 Copyright Enhver mangfoldiggørelse af tekst eller illustrationer

Læs mere

Appendiks 6: Universet som en matematisk struktur

Appendiks 6: Universet som en matematisk struktur Appendiks 6: Universet som en matematisk struktur En matematisk struktur er et meget abstrakt dyr, der kan defineres på følgende måde: En mængde, S, af elementer {s 1, s 2,,s n }, mellem hvilke der findes

Læs mere

Bogstavregning. En indledning for stx og hf. 2008 Karsten Juul

Bogstavregning. En indledning for stx og hf. 2008 Karsten Juul Bogstavregning En indledning for stx og hf 2008 Karsten Juul Dette hæfte træner elever i den mest grundlæggende bogstavregning (som omtrent springes over i lærebøger for stx og hf). Når elever har lært

Læs mere

Komplekse tal og Kaos

Komplekse tal og Kaos Komplekse tal og Kaos Jon Sporring Datalogisk Institut ved Københavns Universitet Universitetsparken 1, 2100 København Ø August, 2006 1 Forord Denne opgave er tiltænkt gymnasiestuderende med matematik

Læs mere

SAX Simple API for XML.

SAX Simple API for XML. SAX Simple API for XML. En API (Application Programming Interface) et bibliotek eller et sæt af funktioner eller metoder. SAX er et sådant bibliotek af abstrakte metoder som f. eks. startdocument() eller

Læs mere

og til summer af stambrøker. Bemærk: De enkelte brøker kan opskrives på flere måder som summer af stambrøker.

og til summer af stambrøker. Bemærk: De enkelte brøker kan opskrives på flere måder som summer af stambrøker. Hvad er en brøk? Når vi taler om brøker i dette projekt, mener vi tal på formen a, hvor a og b er hele tal (og b b 0 ), fx 2,, 3 og 3 7 13 1. Øvelse 1 Hvordan vil du forklare, hvad 7 er? Brøker har været

Læs mere

Kapitel 5 Renter og potenser

Kapitel 5 Renter og potenser Matematik C (må anvedes på Ørestad Gymnasium) Renter og potenser Når en variabel ændrer værdi, kan man spørge, hvor stor ændringen er. Her er to måder at angive ændringens størrelse. Hvis man vejer 95

Læs mere

matx.dk Enkle modeller

matx.dk Enkle modeller matx.dk Enkle modeller Dennis Pipenbring 28. juni 2011 Indhold 1 Indledning 4 2 Funktionsbegrebet 4 3 Lineære funktioner 8 3.1 Bestemmelse af funktionsværdien................. 9 3.2 Grafen for en lineær

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet ksamen 06, side af sider anmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. ursusnavn: lgoritmer og datastrukturer ursus nr. 06. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer

Læs mere

DM13-1. Obligatoriske Opgave - Kredsløbs design

DM13-1. Obligatoriske Opgave - Kredsløbs design DM13-1. Obligatoriske Opgave - Kredsløbs design Jacob Christiansen moffe42@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 1. Opgaven Opgaven består i at designe et kredsløb,

Læs mere

Manual til hjemmeside i Typo3

Manual til hjemmeside i Typo3 Manual til hjemmeside i Typo3 Gode tips og genvejstaster Ét linieskift Ctrl + A Ctrl + C Ctrl + X Ctrl + V shift + enter (tasten du normalt bruger til linieskift) Markér alt Kopier Klip Sæt ind Oprettelse

Læs mere

Matematik. Grundforløbet. Mike Auerbach (2) Q 1. y 2. y 1 (1) x 1 x 2

Matematik. Grundforløbet. Mike Auerbach (2) Q 1. y 2. y 1 (1) x 1 x 2 Matematik Grundforløbet (2) y 2 Q 1 a y 1 P b x 1 x 2 (1) Mike Auerbach Matematik: Grundforløbet 1. udgave, 2014 Disse noter er skrevet til matematikundervisning i grundforløbet på stx og kan frit anvendes

Læs mere

Mandags Chancen. En optimal spilstrategi. Erik Vestergaard

Mandags Chancen. En optimal spilstrategi. Erik Vestergaard Mandags Chancen En optimal spilstrategi Erik Vestergaard Spilleregler denne note skal vi studere en optimal spilstrategi i det spil, som i fjernsynet går under navnet Mandags Chancen. Spillets regler er

Læs mere

Arbejd videre med statistik

Arbejd videre med statistik Danmarks Statistik databanker@dst.dk Arbejd videre med statistik Vejledning i PC-AXIS og Statistikbanken Danmarks Statistik juni 2003 1 www.dst.dk www.statistikbanken.dk Indholdsfortegnelse INDHOLDSFORTEGNELSE...2

Læs mere

AluData: Regneark og brevfletning i LibreOffice. AluData: Regneark og brevfletning i LibreOffice

AluData: Regneark og brevfletning i LibreOffice. AluData: Regneark og brevfletning i LibreOffice AluData: Regneark og brevfletning i LibreOffice Indholdsfortegnelse 1. Indledning...2 2. LibreOffice Calc...2 2.1. Vi lægger et simpelt budget i Calc...2 2.2. Afslutning...12 3. Brevfletning...12 3.1.

Læs mere

Programmering i Javascript

Programmering i Javascript Programmering i Javascript 1. Introduktion HTML er et fortrinligt værktøj til at strukturere og præsentere information, men hvis web siderne skal være interaktive, så der kan reageres på brugerens handlinger,

Læs mere

Kapitel 7 Matematiske vækstmodeller

Kapitel 7 Matematiske vækstmodeller Matematiske vækstmodeller I matematik undersøger man ofte variables afhængighed af hinanden. Her ser man, at samme type af sammenhænge tit forekommer inden for en lang række forskellige områder. I kapitel

Læs mere

Med TI-89 / TI-92 Plus kan du også sammenligne eller manipulere binære tal bit for bit.

Med TI-89 / TI-92 Plus kan du også sammenligne eller manipulere binære tal bit for bit. Kapitel 20: Talsystemer 20 Resumé af talsystemer... 344 Indtastning og omregning af talsystemer... 345 Udførelse af matematiske beregninger med hexadecimale og binære tal... 346 Sammenligning eller manipulation

Læs mere

Noter om Komplekse Vektorrum, Funktionsrum og Differentialligninger LinAlg 2004/05-Version af 16. Dec.

Noter om Komplekse Vektorrum, Funktionsrum og Differentialligninger LinAlg 2004/05-Version af 16. Dec. Noter om Komplekse Vektorrum, Funktionsrum og Differentialligninger LinAlg 2004/05-Version af 16. Dec. 1 Komplekse vektorrum I defininitionen af vektorrum i Afsnit 4.1 i Niels Vigand Pedersen Lineær Algebra

Læs mere

Start af nyt schematic projekt i Quartus II

Start af nyt schematic projekt i Quartus II Start af nyt schematic projekt i Quartus II Det følgende er ikke fremstillet som en brugsanvisning der gennemgår alle de muligheder der er omkring oprettelse af et Schematic projekt i Quartus II men kun

Læs mere

Et alfabet er en ordnet mængde af bogstaver og andre tegn

Et alfabet er en ordnet mængde af bogstaver og andre tegn 16. Tegn og alfabet I dette kapitel studerer vi tegn. Tegn udgør grundbestanddelen i enhver form for tekstbehandling. I senere kapitler, nærmere betegnet kapitel 27 - kapitel 31, ser vi på sammensætningen

Læs mere

Gödel: Über formal unentschiedbare Sätze der Principia Mathematica und verwandter Systeme I, 1931

Gödel: Über formal unentschiedbare Sätze der Principia Mathematica und verwandter Systeme I, 1931 Kommentar til 1 Gödel: Über formal unentschiedbare Sätze der Principia Mathematica und verwandter Systeme I, 1931 Denne afhandling af den 24-årige Kurt Gödel er blevet en klassiker. Det er vist den eneste

Læs mere

Opgave 1 Regning med rest

Opgave 1 Regning med rest Den digitale signatur - anvendt talteori og kryptologi Opgave 1 Regning med rest Den positive rest, man får, når et helt tal a divideres med et naturligt tal n, betegnes rest(a,n ) Hvis r = rest(a,n) kan

Læs mere

Introduktion Til Konkurrenceprogrammering

Introduktion Til Konkurrenceprogrammering Introduktion Til Konkurrenceprogrammering Søren Dahlgaard og Mathias Bæk Tejs Knudsen {soerend,knudsen}@di.ku.dk Version 0.1 Indhold Indhold i Introduktion 1 1 Palindromer 3 1.1 Introduktion til Python...............

Læs mere

matx.dk Differentialregning Dennis Pipenbring

matx.dk Differentialregning Dennis Pipenbring mat.dk Differentialregning Dennis Pipenbring 0. december 00 Indold Differentialregning 3. Grænseværdi............................. 3. Kontinuitet.............................. 8 Differentialkvotienten

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

Note omkring RSA kryptering. Gert Læssøe Mikkelsen Datalogisk institut Aarhus Universitet

Note omkring RSA kryptering. Gert Læssøe Mikkelsen Datalogisk institut Aarhus Universitet Note omkring RSA kryptering. Gert Læssøe Mikkelsen Datalogisk institut Aarhus Universitet 3. april 2009 1 Kryptering med offentlige nøgler Indtil midt i 1970 erne troede næsten alle, der beskæftigede sig

Læs mere

Spil Master Mind. Indledning.

Spil Master Mind. Indledning. side 1 af 16 Indledning. Spillet som denne rapport beskriver, indgår i et større program, der er lavet som projekt i valgfaget programmering C på HTX i perioden 9/11-98 til 12/1-99. Spillet skal give de

Læs mere