Programsprk nr 8 Specifikation Syntax och semantik Historik






















- Slides: 22
Programspråk nr 8 Specifikation Syntax och semantik Historik 1
Specifikation av ett programspråk • En specifikation av ett programspråk är nödvändig för att nå en gemensam uppfattning av språket mellan designers, implementatörer och användare. • Specifikationen definierar vilka program som kan skrivas i språket (syntax) och meningen med varje program (semantik). • En specifikation kan vara informell eller formell. 2
Informell kontra formell • Informell – En informell specifikation är uttryckt med ord i ett naturligt språk – Lättare att läsa och förstå – Lättare att skriva • Formell – En formell specifikation är uttryckt i en speciell notation vilkens mening är exakt definierad – Mer exakt – Kan göras fullständig – Otvetydig 3
Syntax • Beskrivning av hur ett språk ser ut • Språkets symboler och regler hur dessa kan sättas ihop till fraser • Reglerna avgör ifall given en fras är välformad eller ej • Symboler i ett programspråk – identifierare, litteraler (konstanter t ex), operatorsymboler, parenteser etc • Fraser – Uttryck, deklarationer, kommandon, program etc 4
Formell syntax • BNF (eller liknande) expression : : = expression + expression | expression - expression | if expression then expression else expression : : • Syntaxdiagram
Semantik • Vad betyder en fras i ett språk • I programspråk är meningen med en fras den beräkning som frasen beskriver – Meningen med ett uttryck är det värde det beräknar – Meningen med en deklaration är beräkningen som producerar en bindning. • Dessa beräkningar är ofta beroende på rådande bindningar 6
Semantik • Förklaring – (lf. (lx. f (f (f (f x))))): Vad betyder detta? • Krav och behov – Komplett Varje vettig fråga om språket måste besvaras. – Konsistent Motsägande svar får inte ges på en fråga. – Begriplig Användaren måste kunna förstå den. 7
Informell semantik • En beskrivning i ord av vad olika programkonstruktioner betyder. • De flesta programspråk idag har endast infomell semantik • Ganska lätt att förstå och läsa. • Blir ofta tvetydig • Svår att få fullständig 8
Formell semantik • Den förser oss med precisa, maskinoberoende och implementationsoberoende begrepp. • Ger programmeraren ett verktyg för att bevisa egenskaper (t. ex. korrekthet) hos sitt program. • Gör det lättare att jämföra olika språk och språkelement. • En otvetydig språkdefinition ger klara riktlinjer för implementören. • Den gör det också möjligt att bevisa att en implementation är korrekt. 9
Översikt över några viktiga språk • Instruction codes, maskinkod – Endast sifferkoder för operationer och minnesceller • Assembler – Symboliska operationskoder (ass), operatorer – Symboliska adresser, variabler – Labels 10
Fortran – Tonvikt på effektivitet, t. ex. statisk allokering. – Visade att automatisk översättning a) är möjlig, b) går att göra effektivt. – För vetenskapliga, numeriska beräkningar. – Nyheter: Arrayer, kontrollstrukturer för val och repetition, tilldelningssats med komplicerad högersida, formaterad in- och utmatning, maskinoberoende (till viss grad) – Standards. Fortran IV (1966), Fortran 77 (1978), Fortran 90 (1991) 11
Algol 60 – Har haft stort inflytande på teori för och design och definition av programspråk. – Nyheter: BNF definition av syntax, blockstruktur m. lokala variabler och räckviddsregler, stackimplementation, förbättrade kontrollstrukturer, nästning, rekursion. – Ett halvt misslyckande! – Utveckling: Algol. W (records, case-sats mm), Algol 68 (systematisk generalisering, ortogonalitet (t. ex. sammansatta datatyper), coercions. ) 12
COBOL – För "business data processing". – Stöttat av US Do. D – Nyheter: Uppdelning mellan fysisk omgivning, data, procedurer: · Identification division · Environment division · Data division · Procedure division Större möjligheter till strukturering av data Avancerad filhantering 13
LISP • • • Primitiver för listhantering på hög nivå Arbetar med symboliska uttryck Har en matematisk modell (lambda-kalkyl) Data och program representerade på samma sätt Rekursion, funktioner som argument Interaktivt 14
PL/I • Försökte kombinera FORTRAN+ALGOL+COBOL till ett generellt p-språk. • Resultat; ett stort och kraftfullt, men komplext och ohanterligt språk. • Default för allting. • Nyheter: – Undantagshantering (ON condition. . . ) – Enkla möjligheter t parallellism (events) – Pekare, programmerarkontrollerad allokering av minne 15
Pascal • Enkelhet • Stöd för god programmeringsstil, kontrollstrukturer (Algol-likt) • Relativt rik typstruktur, statiska typkontroller, starkt typat • Skulle gå att göra effektiva implementationer • Kraftigt genomslag som undervisningsspråk 16
C • Utvecklat tills med UNIX • Kombination av högnivåspråk och en sorts assemblyspråk – Nästan alla vanliga högnivåfaciliteter – Aritmetik på minnesadresser och dylikt möjligt • • Rik operatoruppsättning (många på lågnivå) Otypat, lätt skriva ostrukturerat (och oläsligt) Relativt lätt att implementera effektivt. C++; objektorienterat, klasser, arv, typkontroll 17
Ada • För "embedded computer systems" (stora komplexa applikationer, kräver hög tillförlitlighet) • Faciliteter för – realtid – parallell bearbetning – interrupt- och undantagshantering • Packages, separatkompilering, bibliotek • Traditionella kontrollstrukturer (Pascalbaserat) • Uppbackat av US Do. D 18
Prolog • Baserat på logik, hornklausuler • Deklarativt; specificerar ett problem genom fakta och relationer • Otypat • För söktillämpningar; databaser, expertsystem etc • Använt i Japans 5: e-generationsprojekt 19
Smalltalk • • Första objekt-orienterade språket (influerat av Simula) En hel programmeringsomgivning, språk, verktyg mm Användarvänlig gränsyta Mycket dynamiskt 20
Funktionella språk • Deklarativa • Funktioner som fullvärdiga objekt; funktionskomposition, funktionaler etc. • Lata – Haskell, Miranda • Strikta – ML 21
Språk för speciella ändamål • Strängmanipulation – SNOBOL 4 • Simuleringsspråk – Simula • Administrativa språk – RPG (Report Program Generator) – 4 GL (Fourth Generation Languages) • Systemprogrammeringsspråk – För operativsystem, kompilatorer, realtidssysten o. dyl – BCPL, Coral 66, Bliss 22