Einführung – Teil II

Werbung
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
Herunterladen