Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Relevanta dokument
List.java. List.java. Printed by Tom Smedsaas

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

F3: Recursive descent, tokenisering, avbildningar och undantag. Carl Nettelblad

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Obligatorisk uppgift: Numerisk kalkylator

Obligatorisk uppgift: Numerisk kalkylator

SMD 134 Objektorienterad programmering

Lösningar för tenta 2 DAT043,

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Obligatorisk uppgift 5: Symbolisk kalkylator

Föreläsnings 9 - Exceptions, I/O

Att skriva till och läsa från terminalfönstret

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Språkkonventioner och redigering av tal.

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

List.java. List.java. Printed by Tom Smedsaas

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

F4. programmeringsteknik och Matlab

Tentamen FYTA11 Javaprogrammering

JAVAUTVECKLING LEKTION 7

Objektorienterad programmering i Java

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 14. Filhantering

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Fördjupad Java. Undantagshantering. Fel

Föreläsning 3. Stack

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

Objektorienterad Programmering (TDDC77)

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Konstruktion av klasser med klasser

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

TDDC77 Objektorienterad Programmering

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Klasshierarkier - repetition

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Tentamen , Introduktion till Java, dtaa98, dtea53

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Klassdeklaration. Metoddeklaration. Parameteröverföring

Objektorienterad Programmering (TDDC77)

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Tentamen OOP

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Föreläsning 3. Stack

Föreläsning 3-4 Innehåll

OOP Objekt-orienterad programmering

Inlämningsuppgift MiniPlotter

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Föreläsning 3: Booleans, if, switch

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Tentamen. Lösningsförslag

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

LÖSNINGSFÖRSLAG TENTAMEN

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Grafik, grafiska användargränssnitt och rörliga bilder

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

17.9 Funktioner för avbildningstabeller

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

JAVAUTVECKLING LEKTION 8

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Malmö högskola 2008/2009 CTS

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Transkript:

Betrakta följande uttryck a +(b + c) d + e (f + g h) Parsing med Recursive Descent, Avbildningsklasser Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 22 november 2010 Beräkning med regler: multiplikation före addition, parenteser först etc. Vi kan emellertid definiera uttryck på följande sätt: Ett uttryck är en sekvens av en eller flera er med + eller - mellan En är en sekvens av en eller flera faktorer med eller / mellan En faktor är antingen ett tal eller ett uttryck omgivet av parenteser Detta kan uttryckas grafisk form i så kallade syntaxdiagram. Syntaxdiagram expression expression +! +! ( expression ) * / public static double expression() { double sum = (); while (nexttoread() == + ) readnextchar(); sum += (); return sum; number (För enkelhetens skull behandlas bara addition.)

* / ( expression ) number static double () { double prod = faktor(); while (nexttoread() == * ) { readnextchar(); prod *= faktor(); return prod; static double () { if ( nexttoread()!= ( ) // skall vara tal return readnextnumber(); else { readnextchar(); // läs förbi ( double result = expression(); readnextchar(); // läs förbi ) return result; (För enkelhetens skull hanteras bara multiplikation) Programmet bygger på tre primitiver: StreamTokenizer Skapas med StreamTokenizer st = new StreamTokenizer(System.in) char nexttoread() som returnerar nästa tecken utan att ta bort det från input-strömmen, char readnextchar() som läser nästa tecken samt double readnextnumber() som läser nästa tal. IJavakandessaprimitivertexuttryckasmedhjälp av klassen StreamTokenizer. Attribut int ttype: Om ett sammansatt token lästs så är det en kod (TT WORD, TT NUMBER, TT EOL...) annars det lästa tecknet String sval: Själva ordet om (ttype==tt WORD) double nval: Själva talet om (ttype==tt NUMBER)

StreamTokenizer forts Metoder int nextitem(): Läser nästa item. Returnerar typ void pushback(): Ser till att det senast lästa blir läst igen. void eolissignificant(b): Omb är true kommer radslutstecknen (TT EOL) att synas. void ordinarychar(c): Anger att tecknet c inte skall kunna ingå i ord. Exempel: TreeMap och HashMap Representerar en avbildning från en nyckelmängd av någon datatyp (t.ex. String) till en värdemängd av någon typ (t.ex. String, Double...) Deklareras och skapas med HashMap<K,D> map = new HashMap<K,D>() Där K är datatypen för nycklarna och D är datatypen för värdena. K och D måste vara typer (klasser hittills). För att lagra värden används metoden D put(k,d) där k och d är referenser till objekt av typen K respektive D. (put returnerar det gamla värdet eller null om det inte fanns något.) För att se om en viss nyckel finns lagrad kan man använda boolean containskey(k) För att hämta värdet används D get(k) HashMap prioriterar snabb access medan TreeMap underhåller en ordning (den föregåendes implementation bygger på arrayer och den senare på träd, därav namnen) Referenser till objekt av typen HashMap och TreeMap kan alla deklareras som Map vi kommer till varför litet senare Demoprogram import java.util.*; import java.io.*; * MapDemoMedUndantag.java * Kommandostyrt program som knyter Sträng-värden till identifierare. * Såväl identifierare ( ord ) som tal som string-konstanter accepteras * som värden. * Fyra kommandon finns: * set id val - ger id värdet val * get id - skriver värdet för id * dump - skriver lagrade värden * quit - avslutar programmet * * Syftet är demonstrera * 1) användning av Map * 2) användning av StreamTokenizer, * 3) felhantering med undantag och * 4) tostring-metoder i Map och Tokenizer public class MapDemoMedUndantag {

Demoprogram // Som vanligt private static final InputStreamReader isr = new InputStreamReader(System.in); private static final BufferedReader br = new BufferedReader(isr); private static final StreamTokenizer st = new StreamTokenizer(br); private static Map<String, String> vars = new HashMap<String,String>(); /* eller vars = new TreeMap<String,String>(); Demoprogram // Som vanligt private static final InputStreamReader isr = new InputStreamReader(System.in); private static final BufferedReader br = new BufferedReader(isr); private static final StreamTokenizer st = new StreamTokenizer(br); private static Map<String, String> vars = new HashMap<String,String>(); /* eller vars = new TreeMap<String,String>(); public static void main(string[] arg) { st.quotechar( \ ); try { while (true) { try { System.out.print("Command:"); String s = readident(); if (s.equals("quit")) break; else if (s.equals("dump")) System.out.println(vars); else if (s.equals("set")) performset(); else if (s.equals("get")) performget(); else throw new MyException("Unknowncommand:" + s); catch (MyException me){ System.out.println("***" + me.getmessage()); System.out.println("Lineskipped"); st.eolissignificant(true); while ( st.ttype!=st.tt_eol ) st.nexttoken(); st.eolissignificant(false); catch (IOException io) { System.err.println("IO-error.Iquit."); * Utför en läser identifierare och värde och lagrar detta par i tabellen * @throws IOException vid IO-fel public static void performset() String s = readident(); String d = readstring(); vars.put(s, d);

* Läser en identifierare och hämtar dess värde ur tabellen * @return Läst identifierare * @throws IOException Vid IO-fel * @throws MyException Om inläst värde inte finns lagrat public static void performget() String s = readident(); String d = null; if ( vars.containskey(s) ) d = vars.get(s); else throw new MyException("Undefined:" + s); System.out.println(s + "=" + d); * Läser en identifierare. * @return Läst identifierare * @throws IOException Vid IO-fel * @throws MyException Om nästa element inte är en identifierare public static String readident() st.nexttoken(); if (st.ttype!=st.tt_word) throw new MyException("Expectedidentif.Found:" + st.tostring()); else return st.sval; * Läser en identifierare eller en sträng innesluten av apostofer ( ). * @return Läst identifierare eller sträng * @throws IOException Vid IO-fel * @throws MyException Om nästa element inte är en identifierare \ * eller sträng public static String readstring() st.nexttoken(); if (st.ttype==st.tt_word st.ttype== \ ) return st.sval; else if (st.ttype==st.tt_number) return "" + st.nval; else throw new MyException("Expectedidentifierorstring.Found:" + st.tostring()); * MyException.java * * En egendefinierad klass för fel som kan uppstå i koden. * Klassen skrivs som en underklass till den systemdefinerade klassen * RuntimeException vilket bl a innebär att den inte behöver * deklareras med throws. * * Klassen råkar också vara placerad i samma fil som huvudklassen. class MyException extends RuntimeException { public MyException() { super(); public MyException(String msg) { super(msg);

Demoprogram - testkörning algol$ java MapDemoMedUndantag Command: set x hej Command: set y hopp Command: dump {y=hopp, x=hej Command: set 12 z *** Expected identifier. Found: Token[n=12.0], line 4 Command: hej hopp! *** Unknown command: hej Command: set Tom Slöjdgatan 10 Command: *** Expected identifier. Found: Token[n=10.0], line 6 Command: set Tom Slöjdgatan 10 Command: dump {Tom=Slöjdgatan 10, y=hopp, x=hej Command: get tom *** Undefined: tom Command: get Tom Tom = Slöjdgatan 10 Command: quit algol$ Paket Klassbiblioteken i Java är organiserade i paket För att få tillgång till en klass i ett paket använder man import-satsen. Exempel: import java.util.scanner; Man kan importera alla klasserna i ett paket med wild card -notation: import java.util.*; Man kan importera static-metoder explicit. Exempel: import static Math.*; varefter man kan referera funktionerna i klassen utan Math. Paket forts Att skapa paket: Välj ett paketnamn (inleds med liten bokstav). Skapa en katalog med samman namn som paketet och placera filerna som skall ingå i paketet där. Varje fil skall inledas med en package-sats. Exempel: package myqueuepackage; Java letar efter klasser i de kataloger som specificeras av miljövariabeln CLASSPATH. Om ingen package-sats hör filerna klasserna till ett anonymt paket. Kom ihåg: paket-synlighet.