Extra övningar på SDD:er/SDT:er



Relevanta dokument
Javisst! Uttrycken kan bli komplicerade, och för att få lite överblick över det hela så gör vi det så enkelt som möjligt för oss.

Huge, hus 1,2,3 BULLERBERÄKNING. Ekvivalent ljudnivå KVARTER 1 AVSER PLAN 1. Huge Fastigheter VÄG- OCH SPÅRTRAFIK SKALA FÖRKLARINGAR

Att använda pekare i. C-kod

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Föreläsning 7: Syntaxanalys

Programmering A. Johan Eliasson

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Lennart Carleson. KTH och Uppsala universitet

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Föreläsning 6: Introduktion av listor

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck

Tentamen OOP

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Inledande programmering med C# (1DV402) Summera med while"-satsen

Dugga Datastrukturer (DAT036)

DD1361 Programmeringsparadigm. Carina Edlund

Grafer. 1 Grafer. Grunder i matematik och logik (2015) 1.1 Oriktade grafer. Marco Kuhlmann

"if"-satsen. Inledande programmering med C# (1DV402)

Föreläsning 7. Träd och binära sökträd

Programmeringsteknik med C och Matlab

Twincat: PLC Control

Inlämningsuppgift MiniPlotter

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

12. Relationer och funktioner

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

2.4. Teckensträngar och logiska uttryck

Grammatik. BNF-grammatik

1 Ändra kolumnbredd och radhöjd

TDP002 - Imperativ programmering

Övningar Dag 2 En första klass

Kungliga Tekniska Högskolan Patrik Dallmann

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Programmerbar logik. Kapitel 4

Föreläsning 13 och 14: Binära träd

Lathund för webbredaktörer. Så skriver du på webben

8-1 Formler och uttryck. Namn:.

1 Skapa Tabell Skapa Relationer Redigera Relationer Redigera Fält i Tabell Lägga till Poster i Tabell...

1. a) (2p) Vilket aritmetiskt uttryck beskrivs av det binära trädet

Sta. Sta. Sta. ulricaelisson.se. Scratch STARTA PROVA KODEN KÖR! TIPS. Rita en ny sprite. Eller välj en från mappen

Flera kvantifierare Bevis Direkt bevis Motsägelse bevis Kontrapositivt bevis Fall bevis Induktionsprincipen. x y (x > 0) (y > 0) xy > 0 Domän D = R

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Klassdeklaration. Metoddeklaration. Parameteröverföring

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Instruktion arbeta med rapportmallen

Programmering Grundkurs (6H2950) Grundläggande Programmering (6A2001)

ANDREAS REJBRAND Matematik Numeriska serier. Andreas Rejbrand, april /29

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Föreläsning 4: Kombinatorisk sökning

ELEVHJÄLP. Diskussion s. 2 Åsikter s. 3. Källkritik s. 11. Fördelar och nackdelar s. 4. Samarbete s. 10. Slutsatser s. 9. Konsekvenser s.

Introduktion till programmering. Standardfunktioner. Vad används datorer till? Standardfunktioner. Föreläsning 2. Prelude. $ ghci...

Dekomponering av löneskillnader

Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA

Lite fakta om proteinmodeller, som deltar mycket i den här tentamen

Att göra spel med Game Maker. Rum. Grundläggande delar. Gamemaker, dagens föreläsning. Programmeringsmodell

F5 Introduktion till digitalteknik

SMD 134 Objektorienterad programmering

Kapitel 22: Överföring av variabler och uppgradering 365. I fönstret VAR-LINK visas en lista med definierade variabler, Flashprogram

Programmeringsuppgifter 1

12. Relationer och funktioner

RödGrön-spelet Av: Jonas Hall. Högstadiet. Tid: minuter beroende på variant Material: TI-82/83/84 samt tärningar

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b)

Föreläsning 7: Syntaxanalys

8-4 Ekvationer. Namn:..

Eget val inom hemtjänsten

Tal Räknelagar Prioriteringsregler

Kontextfria grammatiker

Det första steget blir att titta i Svensk MeSH för att se om vi kan hitta några bra engelska termer att ha med oss på sökresan.

DD1361 Programmeringsparadigm. Formella Språk & Syntaxanalys. Per Austrin

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation

Testning. 1. Inledning

Textbearbetning i skalet och man-sidor

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem

1-6:an skriver sig till läsning läsåret

Jämförelse av miljöenkäter. till personal vid Högskolan i Gävle. Undersökningar gjorda i maj 2002 resp i dec. 2003

Olga hittar Finn MARIE DUEDAHL

En ideal op-förstärkare har oändlig inimedans, noll utimpedans och oändlig förstärkning.

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

Grunderna i SQL del 1

Kom igång med ArcGIS Online - Snabba steg för att börja arbeta

Hjälpmedel för kompilatorkonstruktion, DVB004

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering


Sidor i boken , , 3, 5, 7, 11,13,17 19, 23. Ett andragradspolynom Ett tiogradspolynom Ett tredjegradspolynom

Hälsoenkät SF-36. Bilaga 1

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Användar- och systemdokumentation

1 Funktioner och procedurell abstraktion

Objektorienterad programmering D2

Mål för tema Makt och demokrati år 6-7

Språket, individen och samhället VT08

varandra. Vi börjar med att behandla en linjes ekvation med hjälp av figur 7 och dess bildtext.

Frågor och Svar - Dräger Alcotest 3000

Alfabeten, strängar och språk. String

KLOKA FRÅGOR OM ÄLDRES LÄKEMEDELSBEHANDLING ATT STÄLLA I SJUKVÅRDEN

ELEKTRICITET. Vad använder vi elektricitet till? Hur man använder elektricitet?

Transkript:

Extra övningar på SDD:er/SDT:er Bakvända meningar Grammatik: sentence word sentence sentence ε sentence space sentence word char word char 1 char 2 word char 1 word 1 char 2 Symbolen sentence producerar serier av ett eller flera ord. Token char står för ett tecken ur { a, b,, ö }, och har attributet lexeme. Token space betyder ett mellanslag. Sätt ett attribut rev av strängtyp på sentence som håller den producerade meningen baklänges. Ge också regler för hur detta attribut får ett värde. Till din hjälp kan du använda strängsammanfogningsoperatorn. Gör också om din SDD till en SDT. Syskonnoder i träd Följande grammatik producerar strängrepresentationer av träd vars interna noder kan ha godtyckligt antal barn. tree branch branch internal ( children ) children branch children children leaf children children ε children children Med det här sättet att representera träd skrivs t.ex. ett träd bestående av en rotnod med tre lövnoder som barn ut såhär: internal (leaf leaf leaf), eller ett träd bestående av en rot med ett lövbarn och ett barn som ser ut som roten i det förra trädet: internal (internal (leaf leaf leaf) leaf) eller internal (leaf internal (leaf leaf leaf)). Sätt ett attribut sibs på grammatiksymbolerna internal och leaf som är av heltalstyp och anger hur många syskon noden har. Specificera också regler för hur detta attribut får sitt värde. Omvandla sedan din SDD till en SDT.

Palindrom Använd samma grammatik som i Bakvända meningar ovan, men lägg till ett booleskt attribut på sentence som anger om den producerade meningen blir samma sak baklänges eller inte. Gör en SDD och en SDT. Negativa och positiva deluttryck Grammatik: expr term expr expr 1 + expr 2 term factor term term 1 * term 2 factor num factor id factor factor 1 factor ( expr ) Token num står för numeriska konstanter och har ett attribut val som är ett positivt heltalsvärde. Token id står för identifierare, och identifierares värden går ju inte att veta förrän under körning. Inför attributet sign i expr som kan hålla värdena neg, 0, pos eller?, vilka anger om resultatet av det evaluerade uttrycket är negativt, lika med 0, positivt respektive omöjligt att avgöra i en statisk analys. Det sistnämnda attributvärdet kan behövas för uttryck som innehåller identifierare. Det enda man kan veta om dessa är ju t.ex. att x x är positivt eller att x 0 = 0, och som en utökning av uppgiften kan du lägga till regler som hanterar något eller några av dessa specialfall och på så sätt förbättrar analysens precision. Detta kan kräva att ytterligare attribut införs. Gör också en SDT.

Lösning Bakvända meningar SDD: PRODUKTION SEMANTISKA REGLER sentence word sentence sentence.rev = sentence.rev word.rev sentence ε sentence.rev = sentence space sentence sentence.rev = sentence.rev word char word.rev = char.lexeme word char 1 char 2 word.rev = char 2.lexeme char 1.lexeme word char 1 word 1 char 2 word.rev = char 2.lexeme word 1.rev char 1.lexeme Eftersom SDD:n ovan enbart använder syntetiserade attribut (S-attributed), kan en SDT för att evaluera attributen enkelt konstrueras genom att införa semantiska aktioner sist i alla produktioner. Lösning Syskonnoder i träd Vi använder attributet inh i children och children för att utföra en inkrementell summering av antalet barn i en syskonskara. Då basfallet i produktionen av syskon, som utgörs av regeln children ε, används, innehåller inh den färdiga summeringen av antalet barn, och detta attribut kan då kopieras tillbaka via det syntetiserade attributet count så att varje barn kan använda det för att sätta sibsattributet. SDD: PRODUKTION SEMANTISKA REGLER tree branch branch.sibs = 0 branch internal ( children ) internal.sibs = branch.sibs children.inh = 0 children branch children children.inh = children.inh + 1 branch.sibs = children.count 1 children.count = children.count children leaf children children.inh = children.inh + 1 leaf.sibs = children.count 1 children.count = children.count children ε children.count = children.inh children children children.inh = children.inh children.count = children.count SDT som evaluerar attributen ovan: tree { branch.sibs = 0 } branch branch internal ({ children.inh = 0 } children ){ internal.sibs = branch.sibs } children branch { children.inh = children.inh + 1 } children { branch.sibs = children.count 1; children.count = children.count }

children leaf { children.inh = children.inh + 1 } children { leaf.sibs = children.count 1; children.count = children.count } children ε { children.count = children.inh } children { children.inh = children.inh } children { children.count = children.count } Lösning Palindrom Till detta använder vi samma attribut rev som tidigare, men utökar också grammatiken med ett strängattribut orig som håller strängen i rättvänd ordning, som rev kan jämföras med. PRODUKTION SEMANTISKA REGLER sentence word sentence sentence.rev = sentence.rev word.rev sentence.orig = word.orig sentence.orig sentence.palin = if sentence.rev == sentence.orig then true else false sentence ε sentence.rev = sentence.orig = sentence space sentence sentence.rev = sentence.rev sentence.orig = sentence.orig word char word.rev = char.lexeme word.orig = char.lexeme word char 1 char 2 word.rev = char 2.lexeme char 1.lexeme word.orig = char 1.lexeme char 2.lexeme word char 1 word 1 char 2 word.rev = char 2.lexeme word 1.rev char 1.lexeme word.orig = char 1.lexeme word 1.orig char 2.lexeme Lösning Negativa och positiva deluttryck För att spara information om huruvida båda operanderna till en multiplikation är enstaka variabler med samma namn använder vi strängattributet var som håller variablernas namn. I de fall ett deluttryck inte är en enstaka variabel sätts var till. PRODUKTION expr term expr expr 1 + expr 2 term factor SEMANTISKA REGLER expr.sign = term.sign expr.var = term.var expr.sign = if expr 1.sign == expr 2.sign then expr 1.sign else if expr 1.sign == 0 then expr 2.sign else if expr 2.sign == 0 then expr 1.sign else? expr.var = term.sign = factor.sign term.var = factor.var term term 1 * term 2 term.sign = if term 1.var!= and term 1.var == term 2.var then pos else if term 1.sign == 0 or term 2.sign == 0 then 0 else if term 1.sign ==? or term 2.sign ==? then? else if term 1.sign == term 2.sign then pos else neg term.var =

factor num factor.sign = pos factor.var = factor id factor.sign =? factor.var = id.lexeme factor factor 1 factor.sign = if factor 1.sign == neg then pos else if factor 1.sign == 0 then 0 else if factor 1.sign == pos then neg else? factor.var = factor ( expr ) factor.sign = expr.sign factor.var = expr.var Eftersom SDD:n ovan är S-attributed, kan en SDT enkelt konstrueras genom att evaluera attributen i semantiska aktioner som ligger sist i produktionerna.