Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java
|
|
|
- Oddvin Stene
- 9 år siden
- Visninger:
Transkript
1 Dagens tema: Kompilatorens struktur Oppbyggingen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java De ulike modulene Prosjektet Hva skal Del-0 gjøre? Feilmeldinger Testutskrifter Siste råd og påbud
2 Oppdeling av programmer Prosjektet Hvordan skriver man et større program som en kompilator? Struktur Det bør deles opp i passe store deler. Hvordan bør et program deles opp? Ofte er det fornuftig å se på hvor data flyter.
3 Oppdeling av programmer f.alboc alboc f.s types chargenerator scanner syntax code error log f.log
4 Moduler Noen programmeringsspråk har mekanismer for store moduler men langt fra alle. Java har package. Begrunnelse Anta at vi skal utvikle et CAD-system. Et firma i India har laget en god GUI-modul. Men, begge har en klasse Line. Moduler kan løse dette problemet.
5 Javas pakker Alle filene som skal inngå i en Java-pakke starter med «package navn». Pakkenavn bør bestå av opphavsstedets internettadresse (baklengs) og et lokalt navn. Vårt kompilatorprosjekt heter no.uio.ifi.alboc
6 Javas pakker Eksempel package P1; P1/A.java public class A { public static int x = 1; (Under kompileringen må klassen ligge i et fil-tre som tilsvarer leddene i pakkenavnet; våre filer ligger i no/uio/ifi/alboc/scanner/scanner.java og tilsvarende.)
7 Javas pakker Vi kan hente klasser fra alle pakker så lenge de finnes i CLASSPATH: B.java class B { public static void main (String arg[]) { System.out.println("P1.A.x = " + P1.A.x); package P1; P1/A.java public class A { public static int x = 1; Ifis standard CLASSPATH er: $ printenv CLASSPATH /usr/share/java:/usr/share/java/postgresql-jdbc.jar:.
8 Javas pakker Beskyttelse Klasser kan beskyttes: er usynlig utenfor pakken. public kan brukes fra andre pakker. For klasseelementer gjelder: private er bare tilgjengelige i klassen. protected er for klassen og subklasser. er bare for bruk innen pakken. public kan benyttes overalt.
9 Javas pakker For å unngå å skrive mange lange navn som no.uio.ifi.alboc.alboc.version, kan vi importere klasser fra pakker: import P1.A; B.java class B { public static void main (String arg[]) { System.out.println("P1.A.x = " + A.x); package P1; P1/A.java public class A { public static int x = 1;
10 Javas pakker Vi kan også importere alle klassene fra en pakke: import P1.*; B.java class B { public static void main (String arg[]) { System.out.println("P1.A.x = " + A.x); package P1; P1/A.java public class A { public static int x = 1;
11 Javas pakker En siste mulighet er å importere statiske deklarasjoner i en klasse: B.java import static P1.A.*; class B { public static void main (String arg[]) { System.out.println("P1.A.x = " + x); package P1; P1/A.java public class A { public static int x = 1;
12 Javas pakker Hva kan en pakke inneholde? En Java-pakke kan bare inneholde klasser. Vi trenger også data og metoder og vedtar derfor for prosjektet vårt: I alle pakker finnes en klasse med samme navn som pakken (men stor forbokstav); den inneholder data og metoder vi trenger, og alle er static. Alle disse klassene har disse to metodene: init benyttes til initiering av pakken. finish avslutter pakken.
13 Våre pakker f.alboc alboc f.s types chargenerator scanner syntax code error log f.log
14 Modulen «alboc» Hovedprogrammet alboc package no.uio.ifi.alboc.alboc; import java.io.*; import no.uio.ifi.alboc.chargenerator.chargenerator; import no.uio.ifi.alboc.code.code; import no.uio.ifi.alboc.error.error; import no.uio.ifi.alboc.error.albocerror; import no.uio.ifi.alboc.log.log; import no.uio.ifi.alboc.scanner.scanner; import static no.uio.ifi.alboc.scanner.token.*; import no.uio.ifi.alboc.syntax.syntax; import no.uio.ifi.alboc.types.types;
15 Modulen «alboc» public class AlboC { public static final String version = " "; public static String sourcename = null, sourcebasename = null; public static boolean nolink = false; public static final String myos = System.getProperty("os.name"); // Source file name // Source file name without extension // Should we drop linking? // The current operating system
16 Modulen «alboc» private static boolean checkparams(string[] args) { for (String opt: args) { if (opt.equals("-c")) { nolink = true; else if (opt.equals("-logb")) { Log.doLogBinding = true; else if (opt.equals("-logi")) { Log.doLogTree = true; else if (opt.equals("-logp")) { Log.doLogParser = true; else if (opt.equals("-logs")) { Log.doLogScanner = true; else if (opt.equals("-logt")) { Log.doLogTypeCheck = true; else if (opt.equals("-testparser")) { testparser = true; Log.doLogParser = Log.doLogTree = true; else if (opt.equals("-testscanner")) { testscanner = true; Log.doLogScanner = true; else if (opt.startswith("-")) { return false; else { if (sourcename!= null) return false; sourcename = sourcebasename = opt; if (opt.length()>6 && opt.endswith(".alboc")) sourcebasename = opt.substring(0,opt.length()-6); return true;
17 Modulen «alboc» public static void main(string[] args) { int exitstatus = 0; if (checkparams(args) && sourcename!=null) { System.out.println("This is the AlboC compiler (version " + version + " on " + myos + ")"); try { Error.init(); Log.init(); Code.init(); Types.init(); CharGenerator.init(); Scanner.init(); Syntax.init(); if (testscanner) { System.out.print("Scanning..."); while (Scanner.nextToken!= eoftoken) Scanner.readNext(); else { System.out.print("Parsing..."); Syntax.parseProgram(); if (Log.doLogTree) { System.out.print(" printing..."); Syntax.printProgram();
18 Modulen «alboc» if (! testparser) { System.out.print(" checking..."); Syntax.checkProgram(); System.out.print(" generating code..."); Syntax.genCode(); System.out.println(" OK"); catch (AlboCError e) { System.out.println(); System.err.println(e.getMessage()); exitstatus = 1; finally { Syntax.finish(); Scanner.finish(); CharGenerator.finish(); Types.finish(); Code.finish(); Log.finish(); Error.finish(); if (exitstatus==0 &&! testscanner &&! testparser) { assemblecode(); else { System.err.println("Usage: alboc [-c] [-log{b I P S T] " + "[-test{scanner parser] file"); exitstatus = 2; System.exit(exitStatus);
19 Avbrudd Avbrudd Noen ganger trenger vi å avbryte den normale utførelsen fordi en feil eller noe annet unormalt har skjedd. Hvis dette involverer mange metodekall, er avbrudd («exceptions») nyttig. Sikre avbrudd benyttes der vi vil være sikre på at feilen tas hånd om, f eks FileNotFoundException. Kjøreavbrudd krever ingen slik sikring.
20 Avbrudd void f(...) { : throw new RuntimeException("Melding"); : void g(...) { try { : f(...) : catch (RuntimeException e) { // Hvis feil: : finally { // Alltid: :
21 Modulen «scanner» Skanner En kompilator kan lese og tolke en program tegn for tegn, men det er mye lettere om det kan gjøres symbol for symbol. Dette ordner en skanner. chargenerator leser programkoden linje for linje, fjerner #-kommentarlinjer og deler de andre linjene opp i enkelt-tegn. scanner fjerner /*... */-kommentarer og setter tegnene sammen til symboler.
22 Modulen «scanner» /* Program som leser et tall v og skriver ut den doble verdien. */ # Hovedprogrammet: int main () { int v; /* Les data: */ v = getint() * 2; /* Skriv svaret: */ putint(v); putchar(10); har disse symbolene: int main ( ) { int v ; v = getint ( ) * 2 ; putint ( v ) ; putchar ( 10 ) ;
23 Enum-klasser Enum-klasser Noen ganger har man diskrete data som kun kan ha et begrenset antall fast definerte verdier: Kortfarge Kløver, ruter, hjerter, spar Tippetegn Hjemmeseier, uavgjort, borteseier Ukedag Mandag, tirsdag, onsdag, torsdag, fredag, lørdag, søndag Å representere disse med heltall er en halvgod løsning.
24 Et eksempel Java tilbyr enum-klasser: Tippetegn.java enum Tippetegn { Hjemmeseier, Uavgjort, Borteseier; Dette er syntaktisk sukker for noe à la Tippetegn.java class Tippetegn extends java.lang.enum { public static final Tippetegn Hjemmeseier = new Tippetegn(), Uavgjort = new Tippetegn(), Borteseier = new Tippetegn();
25 Bruk av enum-klasser Slik brukes denne klassen: Tipping.java class Tipping { public static void main (String arg[]) { Tippetegn rekke[] = new Tippetegn[12+1]; rekke[1] = Tippetegn.Hjemmeseier; rekke[2] = Tippetegn.Borteseier; rekke[3] = Tippetegn.Borteseier; for (int i = 1; i <= 3; ++i) System.out.print(rekke[i]+" "); System.out.println(); > java Tipping Hjemmeseier Borteseier Borteseier
26 Bruk av enum-klasser Hva kan vi gjøre med enum-klasser? Tilordne verdier («rekke[i] = Tippetegn.Uavgjort») Sjekke på likhet og ulikhet («rekke[1] == Tippetegn.Borteseier») Skrive ut objektet («System.out.println(rekke[1])» som er det samme som «System.out.println(rekke[1].toString())»)
27 Prosjektet I vår skanner Vår skanner kan levere følgende token: package no.uio.ifi.alboc.scanner; public enum Token { addtoken, amptoken, assigntoken, commatoken, dividetoken, elsetoken, eoftoken, equaltoken, fortoken, greaterequaltoken, greatertoken, iftoken, inttoken, leftbrackettoken, leftcurltoken, leftpartoken, lessequaltoken, lesstoken, nametoken, notequaltoken, numbertoken, returntoken, rightbrackettoken, rightcurltoken, rightpartoken, semicolontoken, startoken, subtracttoken, whiletoken;
28 Modulen «chargenerator» Modulen chargenerator package no.uio.ifi.alboc.chargenerator; import java.io.*; import no.uio.ifi.alboc.alboc.alboc; import no.uio.ifi.alboc.error.error; import no.uio.ifi.alboc.log.log; public class CharGenerator { public static char curc, nextc; private static LineNumberReader sourcefile = null; private static String sourceline; private static int sourcepos;
29 Modulen «chargenerator» public static void init() { try { sourcefile = new LineNumberReader(new FileReader(AlboC.sourceName)); catch (FileNotFoundException e) { Error.error("Cannot read " + AlboC.sourceName + "!"); sourceline = ""; sourcepos = 0; curc = nextc = ; readnext(); readnext(); public static void finish() { if (sourcefile!= null) { try { sourcefile.close(); catch (IOException e) { Error.error("Could not close source file!");
30 Modulen «chargenerator» Metoden readnext leser neste tegn; det blir lagt i curc og neste tegn i nextc. public static void readnext() { curc = nextc; if (! ismoretoread()) return; //-- Must be changed in part 0: To nyttige metoder: public static boolean ismoretoread() { //-- Must be changed in part 0: return false; public static int curlinenum() { return (sourcefile == null? 0 : sourcefile.getlinenumber());
31 Modulen «chargenerator» Modulen scanner Symbolene leses inn i curtoken og nexttoken (samt i curname, curnumber, nextname og nextnumber). package no.uio.ifi.alboc.scanner; import no.uio.ifi.alboc.chargenerator.chargenerator; import no.uio.ifi.alboc.error.error; import no.uio.ifi.alboc.log.log; import static no.uio.ifi.alboc.scanner.token.*; public class Scanner { public static Token curtoken, nexttoken; public static String curname, nextname; public static int curnum, nextnum; public static int curline, nextline; public static void init() { //-- Must be changed in part 0: public static void finish() { //-- Must be changed in part 0:
32 Modulen «chargenerator» Lesingen skjer med readnext-metoden: public static void readnext() { curtoken = nexttoken; curname = nextname; curnum = nextnum; curline = nextline; nexttoken = null; while (nexttoken == null) { nextline = CharGenerator.curLineNum(); if (! CharGenerator.isMoreToRead()) { nexttoken = eoftoken; else //-- Must be changed in part 0: { Error.error(nextLine, "Illegal symbol: " + CharGenerator.curC + "!"); Log.noteToken();
33 Modulen «error» Hva er en god feilmelding? Ubrukelig ERROR: Syntax error detected! Noe bedre ERROR: Syntax error found in line 217. Enda litt bedre ERROR: Syntax error found in line 217: x = x+1 ;
34 Modulen «error» Melding med mening Meldingen bør fortelle hva som er galt: ERROR in line 217: Semicolon expected. x = x+1 ; Den beste meldingen Meldingen bør angi hvorledes kompilatoren «tenker»: ERROR in line 217: Expected ; at end of sentence but found. x = x+1 ;
35 Modulen «error» Feil Hva gjør man med feil? Før prøvde man å finne så mange feil som mulig. Vi skal stoppe med melding ved første feil.
36 Modulen «error» Modulen error package no.uio.ifi.alboc.error; import no.uio.ifi.alboc.log.log; import no.uio.ifi.alboc.scanner.scanner; public class Error { public static void error(string where, String message) { String emess = "AlboC error" + (where.length()>0? " "+where : "") + ": " + message; Log.noteError(eMess); throw new AlboCError(eMess); public static void error(string message) { error("", message); public static void error(int linenum, String message) { if (linenum > 0) error("in line "+linenum, message); else error(message);
37 Modulen «error» Noen ganger tabber vi oss ut! public static void panic(string where) { error("in method "+where, "PANIC! PROGRAMMING ERROR!"); En nyttig rutine public static void expected(string exp) { error(scanner.curline, exp + " expected, but found a " + Scanner.curToken + "!");
38 Modulen «error» Siden de fleste feilene er relatert til lesingen av AlboC-koden, er det nyttig med en egen metode i scanner-modulen: public static void check(token t) { if (curtoken!= t) Error.expected("A " + t); public static void check(token t1, Token t2) { if (curtoken!= t1 && curtoken!= t2) Error.expected("A " + t1 + " or a " + t2); public static void skip(token t) { check(t); readnext(); public static void skip(token t1, Token t2) { check(t1,t2); readnext();
39 Modulen «log» Modulen log Brukeren kan slå av og på logging (med opsjoner som håndteres av alboc-modulen). package no.uio.ifi.alboc.log; import java.io.*; import no.uio.ifi.alboc.alboc.alboc; import no.uio.ifi.alboc.error.error; import no.uio.ifi.alboc.scanner.scanner; import static no.uio.ifi.alboc.scanner.token.*; import no.uio.ifi.alboc.types.*; public class Log { public static boolean dologbinding = false, dologtypecheck = false, dologparser = false, dologscanner = false, dologtree = false; private static String logname, curtreeline = ""; private static int nloglines = 0, parselevel = 0, treelevel = 0; public static void init() { logname = AlboC.sourceBaseName + ".log"; public static void finish() { //-- Must be changed in part 0:
40 Modulen «log» Testutskrifter Alle vil gjøre feil under arbeidet med kompilatoren. For enklere å oppdage feilene når de skjer, skal vi bygge inn ulike testutskrifter som brukeren enkelt kan slå på: Opsjon Hva dumpes? Del logb Navnebindingen 2 logi Internt parseringstre 1 logp Parseringen 1 logs Skanneren 0 logt Typesjekkingen 2
41 Modulen «log» $ ~inf2100/alboc -logs mini.alboc $ more mini.log 1: # Program mini 2: # : # A minimal AlboC program! 4: 5: int main () Scanner: inttoken Scanner: nametoken main Scanner: leftpartoken Scanner: rightpartoken 6: { Scanner: leftcurltoken 7: return 0; Scanner: returntoken Scanner: numbertoken 0 Scanner: semicolontoken 8: Scanner: rightcurltoken Scanner: eoftoken
42 Modulen «log» NB! Siden utskriften på forrige side kommer fra to kilder, vil flettingen av den kunne variere. Variasjoner i fletting er helt normalt og må forventes. Når hele programmet er lest, vil skanneren bare returnere eoftoken.
43 Modulen «log» For å sikre loggfilen, må den lukkes etter hver utskrift. private static void writelogline(string data) { try { PrintWriter log = (nloglines==0? new PrintWriter(logName) : new PrintWriter(new FileOutputStream(logName,true))); log.println(data); ++nloglines; log.close(); catch (FileNotFoundException e) { nloglines = 0; // To avoid infinite recursion // Error.error -> Log.noteError -> Log.writeLogLine ->... Error.error("Cannot open log file " + logname + "!");
44 Modulen «log» I del 0 skal vi sjekke chargenerator og scanner: /** * Make a note in the log file that another source line has been read. * This note is only made if the user has requested it. * linenum The line number line The actual line */ public static void notesourceline(int linenum, String line) { if (! dologparser &&! dologscanner) return; //-- Must be changed in part 0: /** * Make a note in the log file that another token has been read * by the Scanner module into Scanner.nextToken. * This note will only be made if the user has requested it. */ public static void notetoken() { if (! dologscanner) return; //-- Must be changed in part 0:
45 Modulen «log» Feilmeldinger må med i loggen (om det er noen logg): public static void noteerror(string message) { if (nloglines > 0) writelogline(message);
46 Del-0 Del 0 Del 1 Del 2 f.alboc alboc f.s types chargenerator scanner syntax code error log f.log
47 Siste råd? Siste innspill Del-0 skal fungere med opsjonen -testscanner. Les kompendiet! Les Java-koden! (Den største arbeidsinnsatsen ligger i å forstå denne koden.) Det er ikke lov å fjerne noe i basiskoden (men det er lov å legge til). Alt skal programmeres fra bunnen av. Det er altså ikke lov å bruke annet fra Java-biblioteket enn java.lang og java.io (og *Tokenizer er heller ikke lov). Gruppelærerne er der for å hjelpe dere. Begynn i tide!
Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java
Dagens tema: Kompilatorens struktur Oppbyggingen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java De ulike modulene Prosjektet Hva skal del-0 gjøre? Feilmeldinger Testutskrifter Siste råd og påbud
Dagens tema: Prosjektet. Hva er en god feilmelding? Melding med mening. Ubrukelig. Hvor på linjen? Noe bedre. Enda bedre
Dagens tema Dagens tema: Oversikt Prosjektet Feilmeldinger Moduler i prosjektet error log chargenerator scanner Enum-klasser i Java nok en gang f.rusc Char- Generator Del-0 Del-1 Del-2 Rusc f.rask Scanner
Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Enum-klasser i Java
Dagens tema: Kompilatorens struktur Oppbyggingen Pakker i Java Enum-klasser i Java De ulike modulene Prosjektet Hva skal del-0 gjøre? Feilmeldinger Testutskrifter Siste råd og påbud Oppdeling av programmer
Prosjektet. Dagens tema: Moduler i prosjektet error log chargenerator scanner. Enum klasser i Java. Programmeringsverktøy Emacs Eclipse
Dagens tema Dagens tema: Oversikt Prosjektet Del-0 Del-1 Del-2 Moduler i prosjektet error log chargenerator scanner Enum klasser i Java f.rusc Char- Generator Rusc f.rask Scanner Syntax Code Programmeringsverktøy
Dagens tema: Nødvendig Java. De ulike modulene i prosjektet vårt Prosjektet
Dagens tema: Nødvendig Java Strukturen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java Hvilket objekt er jeg? De ulike modulene i prosjektet vårt Prosjektet Hva skal del 1 gjøre? Feilmeldinger
Dagens tema: Nødvendig Java. De ulike modulene Prosjektet. Strukturen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java Hvilket objekt er jeg?
Dagens tema: Nødvendig Java Strukturen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java Hvilket objekt er jeg? De ulike modulene Prosjektet Hva skal del 1 gjøre? Feilmeldinger Testutskrifter Siste
INF2100. Oppgaver 26. september til 1. oktober 2007
INF2100 Oppgaver 26. september til 1. oktober 2007 1 Språket Denne uken skal vi implementere en utvidelse av språket fra forrige ukes oppgave. Syntaksen er vist i figur 1 på neste side og betydning er
Dagens tema: Hva skal gjøres? Hva gjør en kompilator? Hva gjør en kompilator?
Dagens tema Dagens tema: Hva er egentlig prosjektet? Hva skal gjøres? Hvordan oversette kode Hva skal kompilatoren gjøre? Enkel oversettelse Array er Funksjoner Prosjektet Struktur Skanneren Enum klasser
Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Enum-klasser i Java
Dagens tema: Kompilatorens struktur Oppbyggingen Pakker i Java Enum-klasser i Java De ulike modulene Prosjektet Hva skal del-0 gjøre? Testutskrifter Siste råd og påbud Oppdeling av programmer Prosjektet
INF2100. Oppgaver uke 40 og
INF2100 Oppgaver uke 40 og 41 2014 For å få trening i å programmere en parser, skal vi aller først gjøre det for et veldig enkelt programmeringsspråk: E. Dette språket består av uttrykk med de fire vanligste
INF2100. Oppgave 1, 2 og 3. Løsningsforslag til oppgaver 23. og 24. september Her er det mange mulige løsninger her er én: import java.io.
INF2100 Løsningsforslag til oppgaver 23. og 24. september 2010 Oppgave 1, 2 og 3 Her er det mange mulige løsninger her er én: import java.io.*; class E { public static void main(string arg[]) { Scanner.init();
Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering
Dagens tema Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Statiske metoder og variabler Hvordan oppdage feil? Kildekode Hva er kompilering? Anta at
INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)
INF1010 våren 2019 Onsdag 30. januar Mer om unntak i Java (med litt repetisjon av I/O først) Stein Gjessing Lesing fra terminal og fil navn: mininn Bruk Scanner: Scanner mininn = new Scanner(); Type:
TOD063 Datastrukturer og algoritmer
TOD063 Datastrukturer og algoritmer Øving : 3 Utlevert : Uke 7 Innleveringsfrist : 26. februar 2010 Klasse : 1 Data og 1 Informasjonsteknologi Gruppearbeid: 2-3 personer pr. gruppe. Oppgave 1 Vi skal lage
13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER
.9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,
Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?
Dagens tema Dagens tema Kildekode Hva er kompilering? Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Hvordan oppdage feil? Anta at vi lager dette lille
IN2030. Oppgave 1. Løsningsforslag. Uke (Disse filene finnes også i mappen ~inf2100/e/e2/.)
IN00 Løsningsforslag Uke 0 019 Oppgave 1 (Disse filene finnes også i mappen ~inf0/e/e/.) 1 class E { public s t a t i c void main ( S t r i n g arg [ ] ) { Scanner s = new Scanner ( arg [ 0 ] ) ; Expression
Jentetreff INF1000 Debugging i Java
Jentetreff INF1000 Debugging i Java Ingrid Grønlie Guren [email protected] 11. november 2013 Kort om feilmeldinger i Java Java har to ulike type feilmeldinger som man kan få når man skriver
Dagens tema: Sjekking
Dagens tema Dagens tema: Sjekking Navnebinding (obligatorisk oppgave 3) Biblioteket Logging Riktig bruk av navn (frivillig) Typesjekking (frivillig) Hele prosjektet Strukturen til kompilatoren vår f.pas
Litt om pakker og mest om data inn og ut
Litt om pakker og mest om data inn og ut IN105-javainnogut-1 import java.io.*;. Data inn fra tastaturet lesemetode tastatur BufferedReader void lesemetode (String [ ] args) throws IOException {... /* sett
Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?
Dagens tema: 12 gode råd for en kompilatorskriver Hva skal gjøres med navn? Sjekking av navn Hvordan sjekke navn? Testutskrifter 12 gode råd En kompilator må også sjekke riktig navnebruk: Det må ikke forekomme
Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:
Lese fra fil Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo INF1000 : Forelesning 5 Vi må først importere pakken easyio Vi åpner
IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr
IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden [email protected] Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler
Repetisjon. INF1000 - gruppe 13
Repetisjon INF1000 - gruppe 13 Lese fra fil Scanner import java.util.*; void lesfrafil() { try { Scanner innfil = new Scanner(new File( fugleobservasjoner.txt )); while (innfil.hasnext()) { String linje
IN Notat om I/O i Java
IN1010 - Notat om I/O i Java Mathias J.P. Stang, Tuva Kristine Thoresen, Ingrid Grønlie Guren 17. januar 2018 Dette notatet handler om I/O (input/output) i Java, og tar for seg innlesning fra terminal,
Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2
Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2 11.2 Korteste vei i en graf 11.2.1 Dijkstras metode En graf er et system med noder og kanter mellom noder. Grafen kalles rettet Notasjon Verdien
Syntaksanalyse. Skanner (repetisjon) Parsering top-down bottom-up LL(1)-parsering Recursive descent Forutsetninger. IN 211 Programmeringsspråk
Syntaksanalyse Skanner (repetisjon) Parsering top-down bottom-up LL(1)-parsering Recursive descent Forutsetninger Ark 1 av 26 Forelesning 15.10.2001 Syntaksanalyse En parser er et program som analyserer
INF1000 Metoder. Marit Nybakken [email protected] 16. februar 2004
INF1000 Metoder Marit Nybakken [email protected] 16. februar 2004 Motivasjon Når man begynner å skrive store programmer, vil man fort oppleve at programmene blir uoversiktlige. Det blir vanskeligere
Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr
Fra Python til Java En introduksjon til programmeringsspråkenes verden [email protected] Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et eksempel Klasser
Kapittel 8: Programutvikling
Kapittel 8: Programutvikling Redigert av: Khalid Azim Mughal ([email protected]) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk
Dagens tema: Maskinkode. Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler
Dagens tema Dagens tema: Maskinkode Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler Charles Babbage Datamaskinenes historie Menneskene har alltid prøvd
Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man
Eksempel med to-dimensjonal array Filbehandling Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 6 Vi skal lage et program som illustrerer
Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:
Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt: inchar INC inint INI Tegnet eller tallverdien kommer i I registeret. outchar OUTC outint (n) OUTI n outline OLIN I Flink maskinen
Dagens tema: Formålet. Kodegenerering NB! Introduksjon Modulen Code. Enkle variable Noen enkle setninger Uttrykk
Dagens tema Prosjektoversikt Dagens tema: Del-0 Del-1 Del-2 Kodegenerering frusc Rusc frask Introduksjon Modulen Code Char- Generator Scanner Syntax Code Enkle variable Noen enkle setninger Error Log Litt
Forelesning inf Java 4
Forelesning inf1000 - Java 4 Tema: Løkker Arrayer Metoder Ole Christian Lingjærde, 12. september 2012 Ole Chr. Lingjærde Institutt for informatikk, 29. august 2012 1 Repetisjon: arrayer Deklarere og opprette
Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm
Mer om easyio Mer om forgreninger Løkker 7. september 2004 Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 4 1 Tre måter å lese fra terminal Først:
i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4
Forelesning inf - Java 4 Repetisjon: arrayer Tema: Løkker Arrayer Metoder Ole Christian Lingjærde,. september Deklarere og opprette array - eksempler: int[] a = new int[]; String[] a = new String[]; I
3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster
3 emner i dag! INF1000 Uke 5 Litt om objekter, pekere og null Filer og easyio Litt mer om tekster Litt om objekter, filer med easyio, tekst 1 2 Objekter og pekere Vi lager pekere og objekter når vi bruker
INF Notat om I/O i Java
INF1000 - Notat om I/O i Java Tuva Kristine Thoresen, Ingrid Grønlie Guren [email protected], [email protected] 22. oktober 2014 Dette notatet handler om I/O (input/output) i Java, og tar for seg
OPPGAVE 5b og 8b Java Kode
OPPGAVE 5b og 8b Java Kode public class Kant boolean behandlereturavbil() BehandleReturAvBil behandler = new BehandleReturAvBil(this); String regnr; int kmstand, tanknivaa; boolean erskadet; // 1: Få verdiene
IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr
IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden [email protected] Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler
Dagens tema: 12 gode råd for en kompilatorskriver
Dagens tema: 12 gode råd for en kompilatorskriver Hvordan sjekke navn? Testutskrifter 12 gode råd Hva skal gjøres med navn? Sjekking av navn En kompilator må også sjekke riktig navnebruk: Det må ikke forekomme
Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen
Forkurs INF1010 Dag 1 Andreas Færøvig Olsen ([email protected]) Tuva Kristine Thoresen ([email protected]) Institutt for Informatikk, 6. januar 2014 Forkurs INF1010 - dag 1 Hello, World! Typer Input/output
23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.
Grunnkurs i objektorientert programmering Introduksjon til objektorientert programmering INF1000 Høst 2015 Siri Moe Jensen INF1000 - Høst 2015 uke 5 1 Siri Moe Jensen INF1000 - Høst 2015 uke 5 2 Kristen
Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59
Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Formål Formålet med denne oppgaven er å gi trening i hele pensum og i å lage et større program. Løsningen du lager skal være
Programmeringsspråket C
Programmeringsspråket C Bakgrunn Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI standard i 1988; omtrent alle følger
Innlesning fra tastatur med easyio. INF1000 høst 2010. Vi må først skrive i toppen av programmet: import easyio.*;
Innlesning fra tastatur med easyio INF1000 høst 2010 Forelesning 2: Innlesning fra terminal Boolean-variable if-setninger Løkker Litt mer om heltall: divisjon og modulo Vi må først skrive i toppen av programmet:
INF1000-SIKT - Notat om I/O i Java
INF1000-SIKT - Notat om I/O i Java Tuva Kristine Thoresen [email protected] 30. oktober 2013 Innhold 1 Innlesning fra terminal 2 1.1 Innlesning av tekst........................ 2 1.2 Innlesning av tall.........................
TDT4100 Objektorientert programmering
Eksamensoppgave i TDT4100 Objektorientert programmering Torsdag 12. august 2010, kl. 09:00-13:00 Oppgaven er utarbeidet av faglærer Hallvard Trætteberg og kvalitetssikret av Svein Erik Bratsberg. Kontaktperson
Fra Python til Java, del 2
Fra Python til Java, del 2 Hvordan kjøre Java? På Ifis maskiner På egen maskin Et eksempel Array-er For-setninger Lesing og skriving Metoder Biblioteket Hva trenger vi egentlig? Å kjøre Java For å kunne
Leksjon 7. Filer og unntak
6108 Programmering i Java Leksjon 7 Filer og unntak Del2: 7.2 og 7.4 Roy M. Istad 2015 Fil: Permanent lagring av data PrintWriter(filnavn) throws Exception usjekkede/sjekkede unntak? skriver.println(data-i-tekstlinje)
22.02.2009. Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java
Spørsmål fra forrige forelesning INF1000 Forelesning 7 Operator-presedens i Java? Hvordan virker metodene inword()/inint()/etc. i In-klassen i easyio når vi skriver inn flere verdier på tastaturet? Litt
UNIVERSITETET I OSLO
Side 1 UNIVERSITETET I OSLO Kandidatnr Det matematisk-naturvitenskapelige fakultet LØSNINGSFORSLAG Eksamen i: PRØVEEKSAMEN INF1000 Eksamensdag: Prøveeksamen 22.11.2011 Tid for eksamen: 12:15-16:15 Oppgavesettet
I dag skal vi se på. INF 1000 (uke 2) Variabler, tilordninger og uttrykk. Gruppene starter denne uken! Klart for første oblig
INF 1000 (uke 2) Variabler, tilordninger og uttrykk Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo I dag skal vi se på Flere praktiske opplysninger Litt repetisjon Hva er en variabel
Socket og ServerSocket
Side 1 av 5, socket og klient-tjener, V. Holmstedt, HiO 2006 Dette dokumentet er revidert den 29.8.2006, kl:12:30. Det er foretatt rettelser i begge versjoner av klassen A_Server. Socket og ServerSocket
INF1000 undervisningen INF 1000 høsten 2011 Uke september
INF1000 undervisningen INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Forelesningene: Første
HØGSKOLEN I SØR-TRØNDELAG
HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 14.desember 2007 Varighet: 0900-1200 Fagnummer: Fagnavn: Klasser: LO347D Web-applikasjoner med Java EE Nettstudenter
Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9
Generelt om oblig 3 INF1000 Forelesning 9 15. mars 2010 Tips til oblig 3, separatorer i easyio, Eliza (bruk av HashMap), mer om metoder og klasser Christian M. Hansen Institutt for informatikk, UiO Les
Oversikt. INF1000 Uke 3. Repetisjon Program. Repetisjon Program. Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner
Oversikt INF1000 Uke 3 Innlesing fra terminal, formatert utskrift og forgreininger Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner Innlesing Formatert utskrift Repetisjon
Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket
Programmeringsspråk for nybegynnere Krav til språket Hva om vi laget vårt eget språk til INF1000? Programmeringsspråket må være så enkelt som mulig. (Programmering er vanskelig nok som det er.) Hvilke
Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag
Universitetet i Bergen Det matematisk naturvitenskapelige fakultet Institutt for informatikk Side 1 av 7 Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert
Løse reelle problemer
Løse reelle problemer Litt mer om løkker, metoder med returverdier og innlesing fra fil INF1000, uke4 Geir Kjetil Sandve Repetisjon fra forrige uke: while Syntaks: while (condition) do1; do2;... Eksempel:
Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }
Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; Hva skrives ut på skjermen når følgende kode utføres? int [] tallene =
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Side 1 Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Eksamensdag: Onsdag 4. juni 2014 Tid for eksamen: 9:00-15:00 Oppgavesettet er på
IN1010 våren januar. Objektorientering i Java
IN1010 våren 2018 23. januar Objektorientering i Java Om enhetstesting Om arrayer og noen klasser som kan ta vare på objekter Stein Gjessing Hva er objektorientert programmering? F.eks: En sort boks som
UNIVERSITETET I OSLO
FASIT UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen :
Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk
Side 1 av 20 Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk Bokmål Eksamen i emnet INF100 Grunnkurs i programmering Torsdag 27. november 2014 Tid: 09:00 14:00
Videregående programmering 6
Videregående programmering 6 1. Feilkontroll i klasser uten unntaksobjekter Klasser skal lages sikre. Argumentverdier skal kontrolleres, og eventuelle feil skal rapporteres til klienten. I praksis har
Løsningsforslag Test 2
Løsningsforslag Test 2 Oppgave 1.1: Interface definerer et grensesnitt som kan implementeres av flere klasser. Dette gir en standardisert måte å kommunisere med objekter av en eller flere relaterte klasser.
Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag
Universitetet i Bergen Det matematisk naturvitenskapelige fakultet Institutt for informatikk Side 1 av 8 Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag Fredag 10. desember
