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

Like dokumenter
Syntax/semantics INF 3110/ /8/2004 1

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

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

INF3110 Programmeringsspråk

Dagens tema: Regulære språk og uttrykk

Repetisjon. 1 binærtall. INF3110 Programmeringsspråk. Sist så vi ulike notasjoner for syntaks: Jernbanediagrammer. BNF-grammatikker.

Dagens tema Grundig repetisjon og utdyping: Syntaks kontra semantikk

Hva er syntaks? En overskrift i en norsk avis: Dagens tema Grundig repetisjon og utdyping:

Språktyper og syntaksanalyseteknikker. Dagens temaer. Hvordan lage en deterministisk automat? Fra jernbanediagram til ID-automat

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

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

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

Dagens Tema: Grammatikker

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

INF 5110, 3. februar Dette foilheftet: Kapittel 3

Dagens Tema: Grammatikker

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

UNIVERSITETET I OSLO

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

INF januar Forelesninger fremover:

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

Kontekstfrie grammatikker og syntaksanalyse (parsering)

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

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

Anatomien til en kompilator - I

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

INF5110 V2013 Stoff som i boka står i kap 4, men som er generelt stoff om grammatikker

Kap. 5, Del 3: INF5110, fra 1/3-2011

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

INF2820 Datalingvistikk V2015. Jan Tore Lønning

Dynamic Programming Longest Common Subsequence. Class 27

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

INF2820 Datalingvistikk V2012. Jan Tore Lønning & Stephan Oepen

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

INF2820 Datalingvistikk V2012

INF2820 Datalingvistikk V2012. Jan Tore Lønning

2/24/2012. Context-Free Grammars. I dag. Avledning. Eksempel: grammar1 PARSING. Jan Tore Lønning

INF2820 Datalingvistikk V2017 Forelesning 1.2 Jan Tore Lønning

Hjemmeeksamen 2 i INF3110/4110

3/1/2011. I dag. Recursive descent parser. Problem for RD-parser: Top Down Space. Jan Tore Lønning & Stephan Oepen

INF2820 Datalingvistikk V2016. Jan Tore Lønning

INF2820 Datalingvistikk V2016. Jan Tore Lønning

INF2820 Datalingvistikk V2014. Jan Tore Lønning

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

Kap. 5, del 1: Parsering nedenfra-opp (Bottom-up parsering) INF / Stein Krogdahl Ifi, UiO

Anatomien til en kompilator - I

Kap. 5, del 1: Parsering nedenfra-opp (Bottom up parsing) INF5110. Stein Krogdahl Ifi, UiO

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

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

Velkommen til INF Kompilatorteknikk

Statisk semantisk analyse - Kap. 6

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

Velkommen til INF Kompilatorteknikk

Hovedstoffet i kap 4: 16. Februar Ifi, UiO

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

Statisk semantisk analyse - Kap. 6

INF2820 Datalingvistikk V Gang Jan Tore Lønning

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

INF1820: Introduksjon til språk-og kommunikasjonsteknologi

INF1820: Introduksjon til språk-og kommunikasjonsteknologi

Semantisk Analyse del I

INF /2, 2015 Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

3/8/2011. I dag. Dynamic Programming. Example. Example FORMELLE EGENSKAPER VED SPRÅK (KAP. 16) Jan Tore Lønning & Stephan Oepen

INF2820 Datalingvistikk V Gang Jan Tore Lønning

INF / Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

Kontekstfrie grammatikker og syntaksanalyse (parsering)

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

Velkommen til INF Kompilatorteknikk

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

2/22/2011. Høyre- og venstreavledninger. I dag. Chomsky-normalform (CNF) Chomsky-normalform (CNF) PARSING. Jan Tore Lønning & Stephan Oepen

UNIVERSITETET I OSLO

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

INF2820 Datalingvistikk V2015. Jan Tore Lønning

INF5110 Kap. 5: Parsering nedenfra-og-opp (Bottom-up parsing) 21/ Stein Krogdahl Ifi, UiO. Angående Oblig 1:

UNIVERSITETET I OSLO

INF2820 Datalingvistikk V2012. Jan Tore Lønning

Løsningsforslag til hjemmeeksamen 2 i INF3110/4110

INF2820 Datalingvistikk V2014. Jan Tore Lønning

INF2820 Datalingvistikk V Gang 4.5 Jan Tore Lønning

Hovedstoffet i kap 4:

Velkommen til INF Kompilatorteknikk

Hjemmeeksamen 1 i INF3110/4110

UNIVERSITETET I OSLO

INF2820 Datalingvistikk V gang, Jan Tore Lønning

MAT1030 Plenumsregning 1

Del 3: Evaluere uttrykk

Med Svarforslag UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. 3 sider (side 6, 7 og 8, rives ut, fylles ut og leveres)

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

Løsningsforslag til ukeoppgaver i INF3110/4110

INF2820 Datalingvistikk V2012. Jan Tore Lønning

INF2820 Datalingvistikk V Gang Jan Tore Lønning

Kap. 5, Del 2: SLR(1), LR(1)- og LALR(1)-grammatikker INF5110 V2009

INF2820 Datalingvistikk V2017 Forelesning 2, 23.1 Jan Tore Lønning

MAT1030 Diskret Matematikk

1/31/2011 SAMMENHENGER FSA OG REGULÆRE UTTRYKK. Regulære språk. Fra FSA til RE. Fra regulært uttrykk til NFA REGULÆRE UTTRYKK I DATALINGVISTIKK DEL 2

Kap. 5, del 2 LR(1)- og LALR(1)-grammatikker INF5110 V2008

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

Transkript:

Syntax/semantics - I Program <> program execution Compiling/interpretation Syntax Classes of langauges Regular langauges Context-free langauges Scanning/Parsing Meta models INF 3/4-25 8/29/25

Program <> program execution Syntax Semantics INF 3/4-25 8/29/25 2

Syntax <> Semantics A description of a programming language consists of two main components: Syntactic rules: what form does a legal program have Semantic rules: what the sentences in the langauge mean Static semantics: rules that may be checked by the compile before the execution of the program, eg: All variables must be declared Declaration and use of variables coincide (type check) Dynamic semantics: rules saying what shall hapen during (as part of) the execution of the program, eg In terms of an operational semantics, that is a semantics that describes the behaviour of a (idealised) abstract prosessor/machine performing a program INF 3/4-25 8/29/25 3

Programming/Modeling Programming Real World/ Problem/ Program Programming Machine Program execution INF 3/4-25 Program Machine Program execution 8/29/25 4

Compiling/interpretation An interpreter reads a program and simulates its operations Program Data Interpreter Data A compiler/ translator translates a program to another language, typically a machine language or to a language for a virtual machine Program Compiler/ Translator Data Program Interpreter/ Machine Data INF 3/4-25 What do we need to know in both cases? Syntax and semantics of the language 8/29/25 5

Hvordan beskrive syntaks I BNF-grammatikk <tall> - <siffer> <tall> <sifffer> <siffer> <sifre> <siffer> <sifre> <sifre> <sifre> <sifre> <sifre> <sifre> Syntaksdiagram ( jernbanediagram ) tall INF 3/4-25 - 8/29/25 6

Utvidet BNF (Extended BNF) I utvidet BNF kan vi bruke følgende metasymboler i høyresiden: skiller alternativer? angir at noe kan forekomme eller gang * angir at noe kan forekomme eller flere ganger + angir at noe kan forekomme eller flere ganger {} grupperer symboler INF 3/4-25 <tall> - <siffer> <sifffer> <siffer> <sifre> <sifre> <sifre> <sifre> <sifre> <tall> {-}?{ }+ 8/29/25 7

Hvordan beskrive syntaks II Ikke-deterministiske automater Deterministiske automater INF 3/4-25 8/29/25 8

Eksempel BNF-grammatikk produksjon (production, rule) <> <term> venstrerekursjon Syntaksdiagram <> + <term> <term> <term> * navn navn + term grunnsymbol (terminals) metasymbol (non-terminals) INF 3/4-25 term term term * navn navn 8/29/25 9

Avledning av setninger (Derivation of sentences) De mulige setningene i et språk definert av en BNF-grammatikk er nøyaktig de som fremkommer ved å benytte følgende prosedyre: Start med startsymbolet 2 For hvert metasymbol, erstatt dette med et av alternativene på høyresiden i den tilhørende definisjonen 3 Gjenta forrige punkt til vi står igjen med bare grunnsymboler Dette kalles for en avledning (derivation) fra startsymbolet til en ferdig setning, og kan representeres som et syntakstre (syntax tree) INF 3/4-25 term venstreavledning term navn * navn + navn 8/29/25

Entydige/flertydige grammatikker Dersom enhver setning i språket kan avledes ved ett og bare ett syntakstre, er grammatikken entydig (unambiguous), ellers er den flertydig (ambiguous) <> navn <> + <> <> * <> INF 3/4-25 navn + navn * navn navn + navn * navn 8/29/25

Språktyper og syntaksanalyseteknikker Regulære språk (type 3-språk) En BNF-grammatikk med ett metasymbol på venstresiden og kun grunnsymboler på høyresiden, eventuelt med et metasymbol til slutt Kan analyseres med ikke-deterministiske og deterministiske automater Kontekstfrie språk (type 2-språk) En BNF-grammatikk med bare ett metasymbol på venstresiden Nesten alle programmeringsspråk er av denne typen Kan analyseres med parsere (syntakstolkere) Type -språk («kontekst-sensitive») krever at høyresiden er minst like lang som venstresiden Dette gjør det mulig å sjekke navnebindinger og finne typefeil Ble brukt til Algol-68, men lite siden Type -språk har ingen restriksjoner Disse har bare teoretisk interesse INF 3/4-25 8/29/25 2

Bruk av deterministisk automat En deterministisk automat brukes typisk for å sjekke om en gitt streng er med i det aktuelle regulære språket eller ikke: INF 3/4-25 8/29/25 3

Bruk av deterministiske automater Hva hvis strengen ikke er med i språket? INF 3/4-25 8/29/25 4

Hvordan lage en deterministisk automat? En deterministisk automat (D-automat) er lett å bruke, men ikke nødvendigvis så intuitiv å forstå eller lage Fra et regulært (evt via et jernbanediagram) er det imidlertid ganske lett å lage en ikke-deterministisk automat (ID-automat) Kan ha: Tomme kanter (såkalte -kanter) Flere kanter fra samme node med samme symbol INF 3/4-25 Deretter kan vi bruke en standard-algoritme for å gjøre om IDautomaten til en D-automat 8/29/25 5

Example <tall> <FP> <IFP> <tall> { { }* } {{ }+ }? <IFP> <IFP> <IFP> <FP> <FP> <EP> <EP> <EP> <EP> Allowed words are INF 3/4-25 However, not allowed with leading or decimalpoint without preceeding or following ciffers, so the following is not allowed: 8/29/25 6

Parse tree tall IFP IFP FP INF 3/4-25 EP 8/29/25 7

Fra jernbanediagram til ID-automat Hver pens blir til en node i ID-automaten 2 Linjene (med eventuelle symboler) blir merkede kanter mellom nodene Noen kanter får et tomt symbol () 3 Merk nodene hvor man skal begynne og slutte INF 3/4-25 8/29/25 8

Eksempel INF 3/4-25 8/29/25 9

8/29/25 2 INF 3/4-25 Fra ikke-deterministisk til deterministisk automat Ikkedeterministisk: Deterministisk: a, a, a, a, a, a,b, a, a,b, a, a,b, a, a,b, a, a,b, a, a,b, a, a,b, c a, a,b, c a, a,b, c a, a,b, c a, a,b, c c,d, a, a,b, c c,d, a, a,b, c c,d, a, a,b, c c,d, a, a,b, c c,d, a b c d 2 3 4 5

As a table 2 3 4 5 error 2 error 3 5 5 3 error 3 5 5 error 4 4 error error INF 3/4-25 end ok ok 8/29/25 2

Sjekkalgoritme Gitt en slik tabell t, finnes det en enkel sjekkalgoritme: tilstand := ; while <flere tegn igjen> do begin c := <neste tegn>; tilstand := t(tilstand,c); end while; if ok(tilstand) then <match funnet> else <ingen match>; Oppsummering: Hvordan lage raske sjekkprogrammer: Sett opp en ikke-deterministisk automat for det regulære et Lag en deterministisk automat ut fra den ikke-deterministiske automaten Sett opp tilstandstabellen t Bruk søkeløkken over til å sjekke input mot et INF 3/4-25 8/29/25 22

Enkel forklaring på kompilering/interpretering Ved å legge inn programsetninger for å generere kode eller kalle på rutiner får vi henholdsvis en kompilator eller en interpreter tilstand := ; while <flere tegn igjen> do begin c := <neste tegn>; tilstand := t(tilstand,c); // generering av kode (kompilering) eller // kall på rutiner (interpretering) end while; if ok(tilstand) then <match funnet> else <ingen match>; INF 3/4-25 8/29/25 23