Oversikt. INF5110 Obligatorisk Oppgave 1. Andreas Svendsen SINTEF

Like dokumenter
Oversikt. Praktisk. Litt om meg. Obligatorisk oppgave 1 - Kort om oppgaven og verktøyene. Fredrik Sørensen OMS-gruppen, IfI.

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

Obligatorisk oppgave 1 INF Kompilatorteknikk Våren 2012 Frist mandag 19. mars

Obligatorisk Oppgave 1

Obligatorisk Oppgave 1

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

INF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt

Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI

Obligatorisk Innlevering 2

INF5110. Oblig 2 presentasjon

INF Oblig 2 semantikksjekk og kodegenerering

Oblig 2 - Simpila. INF Kompilatorteknikk. Våren Typesjekking, sjekking av bruk av navn og blokkstrtuktur i språk.

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Statisk semantisk analyse - Kap. 6 Foiler ved Birger Møller-Pedersen (Forelest 10/3 og 12/ av Stein Krogdahl)

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

Dagens tema: Mer av det dere trenger til del 1

Hvor er vi nå - kap. 3 (+4,5)? Forenklet skisse av hva en parser gjør PARSER. Kontekstfrie grammatikker og syntaksanalyse (parsering)

Semantisk Analyse del I

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Viktig. Rettet i koden. Obligatorisk oppgave 2 Litt flere detaljer om semantikksjekk og kodegenerering. Semantikksjekk

Spørsmål og svar rundt oblig 1 og verktøy

Dagens Tema: Grammatikker

Dagens tema: Sjekking

INF5110, onsdag 19. februar, Dagens tema: Parsering ovenfra-ned (top-down)

UNIVERSITETET I OSLO

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

INF 5110, 3. februar Dette foilheftet: Kapittel 3

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

Kap. 4: Ovenfra-ned (top-down) parsering

Forelesning inf Java 5

Forelesning inf Java 5

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?

Hovedstoffet i kap 4: 16. Februar Ifi, UiO

Oppgaver til INF 5110, kapittel 4, med svarforslag Gjennomgås tirsdag 21. febr. 2012

Dagens Tema: Grammatikker

Kap. 4 del I Top Down Parsering INF5110 v2006. Stein Krogdahl Ifi, UiO

Kapittel 1 En oversikt over C-språket

Kap.4 del I Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

Statisk semantisk analyse - Kap. 6

INF januar Forelesninger fremover:

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

INF1000 (Uke 6) Mer om metoder, tekster

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

Kontekstfrie grammatikker og syntaksanalyse (parsering)

Statisk semantisk analyse - Kap. 6

Anatomien til en kompilator - I

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Oppgaver til INF 5110, kapittel 4, med svarforslag Gjennomgått torsdag 14. febr Disse foilene er justert 15/2, kl. 11

Syntax/semantics - I INF 3110/ /29/2005 1

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

Kap. 5, Del 2: INF / (og 2/3 og 3/3)

Del 3: Evaluere uttrykk

INF1000 (Uke 6) Mer om metoder, tekster

Orakeltjeneste på Abel Hjelp til Obligatorisk oppgave 2. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. Rep: Metoder

UNIVERSITETET I OSLO

INF2100. Oppgaver 23. og 24. september 2010

Kap. 5, Del 2: SLR(1), LR(1)- og LALR(1)-grammatikker INF /2-2011

UNIVERSITETET I OSLO

INF2100. Oppgaver uke 40 og

Dagens tema: Resten av det dere trenger til del 1

Anatomien til en kompilator - I

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Kap. 4, del I: Top Down Parsering Pluss oppgave til kapittel 3 INF5110 V2008

Velkommen til INF Kompilatorteknikk

Dagens tema: Resten av det dere trenger til del 1

Velkommen til INF Kompilatorteknikk

UNIVERSITETET I OSLO

INF2100. Oppgaver 9. oktober 2012 C 100 X 10

Del 1 En oversikt over C-programmering

INF2100. Oppgaver 6. og 11. oktober 2011 C 100 X 10

Hovedstoffet i kap 4:

Kap 6.4: Typesjekking Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 19. og 23. mars Dagens tema: Typer og typesjekking

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Syntaksanalyse. Skanner (repetisjon) Parsering top-down bottom-up LL(1)-parsering Recursive descent Forutsetninger. IN 211 Programmeringsspråk

Velkommen til INF Kompilatorteknikk

Blokker og metoder INF1000 (Uke 6) Metoder

Masteroppgave (60 studiepoeng)

Administrivia INF 3110/ INF /02/2005 1

Syntaksanalyse. Dagens tema: Språkdiagrammene Jernbanediagrammene er et ypperlig utgangspunkt for å analysere et program: INF2100 INF2100 INF2100

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

UNIVERSITETET I OSLO

INF5110, tirsdag 5. februar, Dagens temaer: - Oppgaver til kap. 3 Svar ligger på slutten av foilene, men forsøk deg først selv!!

Hjemmeeksamen 2 i INF3110/4110

UNIVERSITETET I OSLO

Dagens tema: INF2100. Syntaksanalyse. Hva annet gjør en kompilator? Sjekking av navnebruk. Testutskrifter

Dagens tema: 12 gode råd for en kompilatorskriver

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Med rettelser til oppgave 5.18, gjort 3/3

Løse reelle problemer

INF1000 : Forelesning 5

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; }

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

Transkript:

INF5110 Obligatorisk Oppgave 1 Andreas Svendsen SINTEF 19. Februar 2009 1 Oversikt Om meg Praktisk informasjon Oppgaven Språket (D-flat) Terminaler Metasymboler Grammatikken JFlex CUP Oppsummering Neste uke 2 1

Om meg Stipendiat i MoSiS-prosjektet ved SINTEF Veileder er Birger Møller-Pedersen og Øystein Haugen Startet januar 2008 Mastergrad fra UiO i 2007 Utvidet Java med nye begreper (generiske traits) ved hjelp av AntLR Tok INF5110 våren 2006 3 Praktisk informasjon Obligen er tilgjengelig på kurssiden Grupper på opptil tre personer Frist 20. mars Veiledning per e-post eller avtale E-post: Andreas.Svendsen@sintef.no TLF: 22 06 76 78 4 2

Oppgaven Bruke scannings- og parseringsverktøy JFlex CUP Skrive om en grammatikk fra én form til en annen Utvidet BNF -> BNF som passer verktøyet Kontrollere presedens og assosiativitet på to måter: Entydig grammatikk Funksjonalitet i CUP Bygge abstrakt syntaks tre (AST) Skrive det abstrakte syntakstreet til et gitt format Rapport som beskriver løsningen 5 Språket (D-flat) struct Complex var float Real; var float Imag; func ret Complex Add( Complex a, Complex b ) var Complex retval; retval := new Complex(); retval.real := a.real + b.real; retval.imag := a.imag + b.imag; return retval; func Main() func ret float Square( float val ) return val ** 2.0; var float num; Strukt Variabel Funksjon Opprette ny instans av strukten Complex Aksessere variable i strukter (dot-notasjon) Nestede blokker num := 6.480740; print_float( num ); print_str( " squared is " ); print_float( Square( num ) ); return; Biblioteksfunksjoner 6 Merk: Deklarasjoner før statements. 3

Språket (D-flat) (2) func Swap( ref int a, ref int b ) var int tmp; tmp := a; a := b; b := tmp; func Main() var int x; var int y; Call-by-reference Call-by-reference x := 65; y := 12; Swap(ref x, ref y); return; 7 Terminaler Terminaler uten verdi: IF, THEN, ELSE, WHILE, DO, RETURN, etc. Terminaler med verdi: NAME Starte med bokstav, og deretter en sekvens av bokstaver, siffer og underscore. INT_LITERAL Ett eller flere siffer FLOAT_LITERAL Ett eller flere siffer, fulgt av punktum, fulgt av ett eller flere siffer. STRING_LITERAL Tekststreng mellom to anførselstegn ( ) uten linjeskift. 8 4

Metasymboler Gjentakelse null eller flere ganger ( regex: * ) [ ] Er enten med eller ikke ( regex:? ) Må skrives om til vanlig BNF 9 Grammatikken PROGRAM -> DECL DECL Én eller flere deklarasjoner DECL -> VAR_DECL FUNC_DECL STRUCT_DECL VAR_DECL -> "var" TYPE NAME ";" FUNC_DECL -> "func" [ "ret" TYPE ] NAME "(" [ PARAM_DECL "," PARAM_DECL ] ")" "" DECL STMT "" Statements kun i STRUCT_DECL -> "struct" NAME "" VAR_DECL " funksjoner 10 5

Grammatikken (2) EXP VAR -> EXP LOG_OP EXP "!" EXP EXP REL_OP EXP EXP ARIT_OP EXP "(" EXP ")" LITERAL CALL_STMT "new" NAME "(" ")" VAR -> NAME EXP "." NAME Hva med presedens og assosiativitet? Støtte for dotnotasjon 11 Grammatikken (3) STMT -> ASSIGN_STMT ";" IF_STMT WHILE_STMT RETURN_STMT ";" CALL_STMT ";" ASSIGN_STMT -> VAR ":=" EXP IF_STMT -> "if" EXP "then" "" STMT "" [ "else" "" STMT "" ] 12 6

JFlex package oblig1parser; import java_cup.runtime.*; %% Skilletegn Brukerkode %class Lexer %unicode %cup %line %column %public % % Kompatibilitet med CUP Makrodefinisjoner Opsjoner og deklarasjoner WhiteSpace %% = [ \t\f] WhiteSpace "struct" return new Symbol(sym.STRUCT); "" return new Symbol(sym.LBRACK); "" return new Symbol(sym.RBRACK); Returnerer et nytt Symbolobjekt. throw new Error("Illegal character '" + yytext() + "' at line " + yyline + ", column " + yycolumn + "."); 13 Leksikalske regler og operasjoner CUP package oblig1parser; import java_cup.runtime.*; import syntaxtree.*; import java.util.*; parser code : :; /* Terminals */ terminal STRUCT; terminal LBRACK, RBRACK; Typen til resultatet av produksjonen /* Non terminals */ non terminal Program program, struct_decl; Labels /* The grammar */ program ::= struct_decl:sd : RESULT=sd; : Actions ; struct_decl ::= STRUCT LBRACK RBRACK : RESULT=new Program(); : ; Brukerkode Deklarasjoner Grammatikken 14 7

Oppsummering Lage to grammatikker og løse skift/reduser-konflikter Bygge opp syntakstre ved hjelp av parserverktøyet Skrive ut syntakstreet 15 Neste uke Mer detaljert gjennomgang av JFlex og CUP Les gjennom oppgaveteksten og se på eksempel-filene Send spørsmål så snart noe er uklart 16 8