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

Dagens tema: Regulære språk og uttrykk

Dagens tema Grundig repetisjon og utdyping: Syntaks kontra semantikk

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

UNIVERSITETET I OSLO

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

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

Dynamic Programming Longest Common Subsequence. Class 27

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

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

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

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

Statisk semantisk analyse - Kap. 6

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

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

UNIVERSITETET I OSLO

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

INF2820 Datalingvistikk V2012. Jan Tore Lønning

Løsningsforslag til hjemmeeksamen 2 i INF3110/4110

Hjemmeeksamen 1 i INF3110/4110

MAT1030 Plenumsregning 1

Løsningsforslag til ukeoppgaver i INF3110/4110

INF2820 Datalingvistikk V Gang Jan Tore Lønning

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

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

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