K01 Einführung– TeilII 1. Programmiersprache 2. Softwareprozessorbzw.Übersetzer • CompilerversusInterpreter 3. Typ,Typsystem 4. Bezeichner,Gültigkeitsbereich 5. Anweisung,Ausdruck thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 2 WasisteineProgrammiersprache? Informell: EineProgrammierspracheisteinekünstlicheSprache zurNotationvonProgrammen.1 Etwasgenauer: EineProgrammierspracheisteineMenge vonWörtern übereinemendlichenAlphabet.SiedientderUmsetzung vonAlgorithmenineinemaschinenverarbeitbare Form.2 1 ISO/IEC2382-1:1993– Informationtechnology – Vocabulary – Part1:Fundamentalterms 2 nachR.Dumke thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 3 DefinitionProgrammiersprache Formell: SeiG = (V, Σ, R, σ) eine(i.d.R.kontextfreie)Grammatik,bestehendaus n V, eineendlicheMengederNichtterminale (Variablen), n Σ, eineendlicheMenge – dasAlphabet (Terminale)– sodassV Ç Σ = Æ, n R, dieMengederAbleitungsregeln (Produktionsregeln),sowie n σ Î V, demStartsymbol. EineProgrammierspracheisteinTripelLprog = (L(G), S, I) wobei * n L(G) = {w Î Σ* | σ ÞG w} dieSpracheist,diedurchdieGrammatik G generiertwird(dieMengederableitbarenWörterüberG), n S dieMengederInterpretationsregelnist– Semantik – und n I : R ® S eineberechenbareFunktionist– Implementierung. nachR.Dumke thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 4 Softwareprozessorbzw.Übersetzer n Informell:EinSoftwareprozessor/Übersetzerverarbeiteteingegebenes ProgrammineinerwohldefiniertenArtundWeiseindemeres: n n transformiertineinanderesundmeistensäquivalentesProgrammeiner anderenSprache. Oberbegrifffür: n Präprozessor,Postprozessor,Compiler,Interpreter,Linker,Generator, Disassembler,... Formell: SeienL0,L1 undL2 formaleSprachensodassL0 ≠ L1 (L0 = L2 bzw.L1 = L2 möglich). DannisteinSoftwareprozessoreinTripel p = (L0, L1, L2) welchereingegebenesL0-ProgrammineinL1-Programmtransformiertundwelcher selbstinL2 geschriebenist.M.a.W.:AbbildungvonL0 aufL1,implementiertdurchL2. thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 5 Beispiel– Compiler SeiL0 dieProgrammierspracheC++(“höhere” Sprachemiteinermächtigeren undabstrakterenBefehlsmenge),L1 dieIntelx86Maschinensprache („einfache“Sprache),undseiL2 dieProgrammierspracheC (Implementierungssprache). DannisteinC++-Compilerfürx86ProzessorenderselbstinCgeschriebenist einSoftware-Prozessor p = (L0, L1, L2) . thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 6 GrafischeDarstellung McKeeman-Diagramm(auchTombstone-Diagramm) p = (L0 , L1, L2 ) Ausgangssprache (Eingabe) L0 L1 L2 Zielsprache (Ausgabe) Implementierungssprache vonp BeieinemInterpreteri gibtesdieZielspracheL1 nicht,deshalb: i = (L0 , L2 ) Ausgangssprache (Eingabe) L0 L2 Implementierungssprache voni thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 7 VerknüpfungvonS'prozessoren 1. Komposition p2 ! p1 = p p1 p2 L2 L2 L0 L1 L3 L1 p1 undp2 werdenhintereinanderausgeführtunddamitzup = (L0, L3, L1) zusammengefasst Beispiel: Java(L0)à Bytecode(L2)à Maschinencode(L3) p1 BytecodeCompiler,p2 Just-in-timeCompiler thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 8 VerknüpfungvonS'prozessoren 2. Applikation p1 ( p2 ) = p!2 p'2 p2 L3 L4 L1 p1 L1 L3 L4 L2 L2 L p1 wirdaufp2 inderWeiseangewandt,dasserdieImplementierungssprache vonL1 aufL2 ändertp'2 = (L3, L4, L2) Beispiel:BootstrappingeinesC++Compilerder inC++geschriebenistdurcheinenC++Compiler derinCgeschriebenist. C++ M C++ C++ thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf M C 03.März2017 9 InterpreterversusCompiler Interpretation: Eswirdein(ständiglaufendes) L1–Programm(Interpreter)vorgegeben. DiesesProgrammnimmtdas L0–ProgrammalsEingabe,überführtjeden L0–BefehlineineFolgevon L1–Befehlenundführtdiesesofortaus. L0 Benutzerprogramm Übersetzung: DaskompletteL0–Programmwirdineine FolgevonL1–Befehlen(L1–Programm) übersetzt.DiesesProgrammkanndanndirekt ausgeführtwerden.Dasursprüngliche L0–Programmwirdnichtmehr benötigt. L0 EingabeDaten L1 Interpreter Benutzerprogramm EingabeDaten Ausführung L1 Übersetzer übersetztes Benutzerprogr. Ausführung thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 10 TypsystemundTyp n (i) Objekte,diemiteinemProgrammmanipuliertwerden, unterteiltmanintuitivindisjunkteMengen. Beispiele: Daten:(ganze)Zahlen,Zeichenketten,Datum,Zeit,E-Mail,... Datenstrukturen:Listen,Matrizen,Graphen,... Funktionen:int ->int ,... Xint 5 Î Xint XList<int> [5,2] Î XList<int> X2d-matrix<int> Xfunction int -> int [[5,1],[1,2]] Î X2d-matrix<int> thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 11 TypsystemundTyp n (ii) ObjekteverschiedenerMengenhabenunterschiedliche Eigenschaften(aberinnerhalbeinerMengedieselben) unddemzufolgesindfürObjekteverschiedenerMengen unterschiedlicheOperationen sinnvoll. Beispiele: Zahlen:Addition,Subtraktion,... Listen:Konstruktor,Konkatenation,(indizierte)Selektion,... Funktionen:Aufruf,Kompositionf(g(x)) thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 12 TypsystemundTyp (iii) Definition Typ: EinTypistein2-TupelT = (X, O),wobeiX eineMenge1 vongleichartigenObjekten x Î X undO eineMengevon Operationen o Î O ist,dieaufX definiertsind.2 Beispiele: Tboolean = ( {true, false}, {&&, ||, !} ) T32-bit unsigned int = ( {0, 1, 2, ..., 232-1}, {+, -, *, /} ) X kanntheoretischunendlichsein;praktischistX aberimmerendlich,daheutige MaschinenendlicheRessourcenhaben(z.B.Speicher).LeereMengefürX, O u.U.sinnvoll. 2 JedeOperationo Î O isti.d.R.total,kannaberauchpartiellsein.StelligkeitvonOperationen meistunäroderbinär.DefinitionsbereichD einerOperationo Î O allgemein: D ⊆ X1 × ... × Xn mit n ≥ 0. Falls n ≥ 1 dann∃Xi: Xi = X (0 ≤ i ≤ n) undalleanderen Xj (i ≠ j) nichtnotwendigerweisegleich X. 1 thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 13 TypsystemundTyp (iv) Definition Typsystem: EinTypsystemistein2-TupelS = (A, R),wobeiA eine Funktionist,dieeinemTermt einerProgrammiersprache einenTypT zuordnet– t istmitT assoziiert–,undR eine MengevonRegeln ist,mitdenenmandasVorhandensein bzw.NichtvorhandenseinvonTypfehlernzwischenzwei Terment, u beweisenbzw.zusichernkann. thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 14 WesentlicheTypklassen n n n n n n Datentypen ZusammengesetzteTypen(Datenstrukturen) Zeigertypen Funktionstypen PrimitiveDatentypen(auchelementargenannt)sindintegralerBestandteileiner Programmierspracheundi.d.R.gegebendurchdieMaschine(CPU)fürdieeine Spracheimplementiertist,d.h.fürdieeinCompiler/Interpreterexistiert. BenutzerdefinierteTypenwerdendurchAbleitung oderKonstruktion aus primitivenTypengebildetundsind,wiederNameandeutet,nichtintegraler BestandteileinerProgrammiersprache.DieAbleitungs- bzw.Konstruktionsarten sindi.d.R.durchdiejeweiligeProgrammiersprachevorgegebenundendlich. Nichtsdestotrotzlassensichi.d.R.unendlichvielebenutzerdefinierteTypen,die u.U.aberstrukturellgleichsindoderidentischeWertebereichehabe,definieren. thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 15 AufgabenvonTypsystemen 1. ErkennenvonTypverletzungen– nichterlaubte odernichtsinnvolle„Dinge“verhindern,z.B.: n n AnwendungeinerOperation,dieaufeinemDatentyp nichtdefiniertist. FalscheArgumentanzahlund/oder-typbeiFunktions/Methodenaufruf. 2. Typumwandlung– meistbeiDatentypen: n n Beförderung(up cast) Degradierung(downcast) xsub ® xsup xsup ® xsub thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf Xsub Í Xsup 03.März2017 16 Typsysteme n ImweiterenVerlaufderVorlesungwerdenwir weitereBegriffekennenlernen: Typisierung... n n n ... statisch versusdynamisch ...schwach versusstark ...explizit versus implizit Typüberprüfung Typsicherheit Typinferenz thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 17 Bezeichner(Symbol) n EinBezeichneristderName eines Programmelementes;z.B.: n n n n n n engl.identifier Variable/Zeigervariable/Referenz Funktion/Methode/Prozedur Struktur/Klasse/Aufzählung Alias Atom/Prädikat Insystemnahenbzw.imperativenSprachenistein BezeichnermeistfestmiteinemSpeicherbereich assoziiert,insbesondereistdiesfürVariablender Fall. thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 18 Bezeichner n MeistunterliegenBezeichnerbestimmten lexikalischenRegeln(sindalsonichtbeliebigwählbar): n n n n (ii) Längenbegrenzung Schlüsselwörternicht(überall)erlaubt,z.B. do if for while switch class struct ... Alphabeterlaubter(Start-)Zeichen,z.B. a..z 0..9 üöäéè _-%$@& Beachte:VieleSprachenbietendieMöglichkeitfür anonymeElemente,diealsonichtbenanntsind,und nurausihremKontextherausidentifizierbarsind. thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 19 Namensauflösung n EindeutigeAbbildungvonBezeichnern/Namenauf Programmelemente(z.B.Speicherbereich,Speicheradresse). n n Realisiert/implementiertdurchCompiler,LinkeroderInterpreter. Assemblersprachen n n engl.name resolution BezeichnerwerdendurcheinesimpleLookup-Tabelleauf Programmelemente,abgebildet HöhereSprachen n MehroderwenigerkomplexeMechanismen/Regeln. thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 20 Beispiel:NamensauflösunginC++ n n C++giltalseinederkomplexestenSprachenhinsichtlichder RegelnzurNamensauflösung. InC++istdieNamensauflösungbeeinflusstdurch: n n n n Namespaces – identischeBezeichnerkönnenjenachKontext unterschiedlichenProgrammelementenzugeordnetsein. Lexical Scope – Programmabschnitt. Visibility – Regeln,dieinnerhalbVererbungshierarchienzumTragen kommen. Overloading – Regeln,diegestatten,dassunterschiedlicheElemente (insbesondereFunktionen)überidentischeBezeichnerangesprochen werdenkönnen. thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 21 Gültigkeitsbereich n engl.scope Programmabschnitt*,indemeinBezeichner nutzbarbzw.sichtbarist. n n Nichtnotwendigerweisezusammenhängend! BeiVariablen:nichtnotwendigerweiseidentischmit Lebensdauer,d.h.ZeitraumindemfürVariable Speicherreserviertist! (z.B.static inC,C++,Java) Gültigkeitsbereich≤Lebensdauer SichtbarkeitunterliegtpräzisedefiniertenRegeln. *GemeintsinddamitAbschnittedesQuelltextes,nichtzeitlicheAbschnittezurLaufzeit. thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 22 Gültigkeitsbereich n (ii) EsexistierenimWesentlichenzweiunterschiedliche Regeltypen,diedieSichtbarkeitdefinieren: 1. LexikalischerGültigkeitsbereich n n n engl.lexical scope DerProgrammkontext (d.h.derumgebende Programmtext)bestimmtdenGültigkeitsbereich. GültigkeitunabhängigvomAufruf-Stack. Heutzutageamverbreitetsten. à KannvorderLaufzeit(alsostatisch)bestimmtwerden. thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 23 Gültigkeitsbereich 2. DynamischerGültigkeitsbereich (iii) engl.dynamic scope DerProgrammablaufundderProgrammzustandzurLaufzeit (d.h.dieProgrammausführungsgeschichtebiszum momentanenZeitpunkt)bestimmendenGültigkeitsbereich. n GültigkeitgekoppeltanAufruf-Stack; d.h.sieleitetsichdirekt vondenRegelnab,wannaufdemStack einneuerAufrufFrameerzeugtwirdundwanndieserwiedergelöschtwird. (Lässtsichdadurchleichterimplementierenalsstatic scope, woimWesentlichenderCompilerverantwortlichist). à KannimAllgemeinennurzurLaufzeit(alsodynamisch) bestimmtwerden. n thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 24 Gültigkeitsbereich- Beispiel JavaScript– lexical scope (iv) Bash – dynamic scope var x=1; function g() { console.log(x); x=2; } function f() { var x=3; g(); } f(); // Ausgabe 1, oder 3? console.log(x); // Ausgabe 1, oder 2? x=1 function g() { echo $x; x=2; } function f() { local x=3; g; } f # Ausgabe 1, oder 3? echo $x # Ausgabe 1, oder 2? g() gibtglobaleVariablex aus,da g() gibtf()‘slokalesx aus inersterZeiledefiniert. undmodifiziertdieses. AusgabeaufKonsole: 1 2 AusgabeaufKonsole: 3 1 thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 25 Anweisung n Befehl mitwohldefinierterSemantik n n n n engl.statement Entwederdirektausführbar(Maschinenbefehl),oder ÜbersetzungineineMengevonMaschinenbefehlen. CharakteristischfürimperativenSprachen WesentlicheAnweisungsarten: n n n n Deklaration Zuweisung Kontrollstruktur int x; x = 10; if (x == true) { ... } else { ... } while (x > 0) { ... } Sprunganweisung goto,return,break,() thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 26 Ausdruck n LiefertbeiAuswertung einenWert (Ergebnis) n Auswertunggemäss: n n n n n engl.expression math.Kalkühl/Theorie(z.B.sukzessiveTermersetzung) Auswertungsstrategie(z.B.lazy odereager;dazuspätermehr) CharakteristischfürdeklarativeSprachen MancheAnweisungensindauchAusdrücke,z.B.Zuweisung, Prozeduraufruf WesentlicheAusdrucksarten: n n n Arithmetische Aussagenlogische Prädikatenlogische 3*3 x+(*y) f.g x a||b 4==3 !c birthplace(J.S.Bach,Eisenach) thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017 27 If you really care about software then you have to care about hardware. Steve Wozniak, so oder so ähnlich thorstenmöller- informatik.unibas.ch/lehre/fs17/prog/01-einfuehrung-teilII.pdf 03.März2017