Anders Broberg, Programspråksteoridelen DVA Moment 2 1 Epost: Hemsida: Tel: Rum: D438
Anders Broberg, Programspråksteoridelen DVA Moment 2 2 Att besriva ett språk (Kap 3) Syntax Semantik
Anders Broberg, Programspråksteoridelen DVA Moment 2 3 För vilka skall man beskriva Andra designers av programspråk Implementörer av språk Användarna (programmerarna)
Anders Broberg, Programspråksteoridelen DVA Moment 2 4 Lite (syntax) terminologi Mening Språk Lexem Token
Anders Broberg, Programspråksteoridelen DVA Moment 2 5 Att formellt beskriva syntax Igenkännande –Används i kompilatorer Genererande –Vad vi studerar på kursen
Anders Broberg, Programspråksteoridelen DVA Moment 2 6 Kontextfri grammatik Noam Chomsky 50-talet Naturligaspråk Definierar en klass av språk: Kontextfria språk
Anders Broberg, Programspråksteoridelen DVA Moment 2 7 Backus Normal Form (BNF) Att beskriva Algol 58 Ekvivalent med kontextfri grammatik Ett metaspråk –Dvs ett språk för att beskriva språk Abstraktioner används för att representera klasser av syntaktiska strukturer –Ungefär som syntaktiska variabler
Anders Broberg, Programspråksteoridelen DVA Moment 2 8 (BNF) Abstraktioner mm. En regel har en vänstersida (LHS) och en högersida (RHS) –LHS är den abstraktion som en regel definierar –RHS är definitionen av en LHS –LHS består av terminalsymboler och icketerminaler »Terminalsymboler är lexem och tokens »Icketerminaler är abstraktioner som finns definierade någonstans (LHS) »En abstraktion kan ha mer än en högersida(RHS) En grammatik är en ändlig icketom mängd av regler
Anders Broberg, Programspråksteoridelen DVA Moment 2 9 (BNF) Härledning En härledning är upprepade appliceringar av regler från en startsymbol till en sats där alla symboler är terminaler Ett ”parseträd” är en hierarkisk beskrivning av en härledning En grammatik är tvetydig om och endast om den genererar två eller flera distinkta parseträd för samma uttryck
Anders Broberg, Programspråksteoridelen DVA Moment 2 10 Exempel på en grammatik -> -> | ; -> = -> a|b|c|d -> + | - -> | const
Anders Broberg, Programspråksteoridelen DVA Moment 2 11 Exempel på en härledning => => => = => a = => a = + => a = + => a = b + const
Anders Broberg, Programspråksteoridelen DVA Moment 2 12 Exempel på parseträd
Anders Broberg, Programspråksteoridelen DVA Moment 2 13 Tvetydig grammatik -> | const -> / | -
Anders Broberg, Programspråksteoridelen DVA Moment 2 14 Variabler En abstraktion av en minnescell för att lagra värden –Namn –Bindningar –Adresser –Typkontroll Många viktiga definitioner i kap Hastighet
Anders Broberg, Programspråksteoridelen DVA Moment 2 15 Namn (identifierare) Särskilja, identifiera och abstrahera –Variabler –Underprogram (funktioner, procedurer,…) –Parametrar –Konstanter –Labels (GOTO) Hastighet Acceleration
Anders Broberg, Programspråksteoridelen DVA Moment 2 16 Designfrågor Maximala längden? Vilka tecken är tillåtna? –ASCII eller Unicode –Sammanbindingstecken Skillnad på STORA och små bokstäver? Nyckelord eller reserverade ord
Anders Broberg, Programspråksteoridelen DVA Moment 2 17 Maximal längd FORTRAN 1: max 6 tecken COBOL : max 30 tecken FORTRAN 90 och ANSI C : max 31 tecken Ada: Ingen begränsning på längden, och alla tecken är signifikanta C++: Ingen begränsning i språket, men många implementerare inför det HURLÅNGAIDENTIFIERAREKANMANHAISPR ÅKETFINNSDETNÅGONBEGRÄNSNINGOCH HURPÅVERKARDETLÄSBARETENOCHSKRI VBARHETEN? ???
Anders Broberg, Programspråksteoridelen DVA Moment 2 18 Variabler_med_flera_ord Ofta tillåts _ i namn för att sammanbinda flerordsnamn Standard Pascal, Modula 2 och FORTRAN 77 tillåter inga sådana tecken –I FORTRAN 77 har inte blanktecken någon betydelse… ManBrukarAnvändaDennaStilFörAttÖkaLäsbarheten
Anders Broberg, Programspråksteoridelen DVA Moment 2 19 Skillnad mellan STORA och små bokstäver Läsbarheten påverkas negativt –NAMN och namn är två olika identifierare trots att de är väldigt lika Modula-2 ställer till med ännu mer problem –Mixar STORA och småbokstäver i föredefinierade namn (WildCard) C, C++, Java, och Modula-2 gör skillnad på STORA och små i namn De flesta andra språken gör ingen skillnad
Anders Broberg, Programspråksteoridelen DVA Moment 2 20 Specialord Def: Ett nyckelord (keyword) är ett ord som är speciellt bara i en viss omgivning (kontext) –Påverkar läsbarheten negativt –Man kan ha egna identifierare som heter som nyckelorden –FORTAN 77 Def: Ett reserverat ord är ett speciellt ord som inte kan användas av användare för att definierade namn –Vanligast idag
Anders Broberg, Programspråksteoridelen DVA Moment 2 21 Variabler Abstraktion av en minnescell En förvaringslåda som kan beskrivas med 6 attribut –Namn –Adress –Värde –Typ –Livslängd –Räckvidd (scope)
Anders Broberg, Programspråksteoridelen DVA Moment 2 22 Variabelnamn Namngivna variabler Anonyma variabler –Minnesceller som bara koms åt via pekare –(Ibland även arrayer och element i arrayer) Adress –Den minnesadress som är associerad med variabeln (platsen i minnet som värdet lagras) –Adressen kan ändras under exekvering –Olika adresser på olika ställen i programmet –Två variabel namn kan användas för att komma åt samma minnescell (Aliasing) –L-value
Anders Broberg, Programspråksteoridelen DVA Moment 2 23 Aliasing Återanvändning av minne –Pekare, referensvariabler, –Variant records i Pascal –Union i C och C++ –FORTRAN har EQUIVALENCE Aliasing påverkar läsbarheten negativt Motivet med Minnesåteranvändning håller inte längre –Dynamsik minnesallokering finns i de flesta moderna språk –Även i FORTRAN
Anders Broberg, Programspråksteoridelen DVA Moment 2 24 Typer Bestämmer omfånget av värden och vad man kan göra med en variabel –Heltal –Flytal –Strängar –”Boolska tal” För flyttal avgör de också precisionen
Anders Broberg, Programspråksteoridelen DVA Moment 2 25 Värde Innehållet i en minnescell som en variabel är associerad med R-value Abstrakt minnescell-den är de minnesceller som är associerade med en variabel –Valigtvis »En heltalsvariabel tar upp flera fysiska minnesceller »En teckenvariabel tar upp 1 fysisk minnescell Hastighet:=320; Hastighet