Introduktion til programmering Programmeringssprog Uge 44 Computer Science, kap 6. Learning Python: kap 13, 14.

Slides:



Advertisements
Lignende præsentationer
Stored Procedure Stored Procedure er programstumper, der gemmes i databasen og afvikles op databaseserveren på samme måde som forespørgsler. Med Stored.
Advertisements

1 Problemkompleksitet 2 Problemers kompleksitet En ineffektiv algoritme: køretiden vokser eksponentielt med input- størrelsen Et problem, der ikke kan.
Velkommen til Softwarekonstruktion
Programmeringsparadigmer.
SQL 1 DDL og DML.
Begreber og Redskaber 1 BRP.
Velkommen Lars Johansson ProjectForce. Program: Lidt omkring Athena IT-Group A/S Introduktion til ProjectForce – Microsoft Sharepoint Lidt teori omkring.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Oversættelse af Java-programmer JavaBytecode javac Normalt oversættes Java-programmer til bytecode, som fortolkes af en JVM (Java Virtual Machine). Java.
Intro Variabler - datatyper. 2. forelæsning Hvad skete sidste gang Hvad er PHP? Kursussammensætning: læse – newsgroup – forelæsning – øvelsestime – aflevering.
Sproghistorie Syntaks (struktur) Semantik (Indhold)
FEN Diskret matematik/Seminar 3 - proofs 1 Beviser Et bevis er en argumentation, som overbeviser om, at en påstand er sand, påstanden kaldes.
Introduktion til programmering Uge 40 Python 2 Learning Python, kap 8-12.
1 Bevisteknikker. 2 Bevisteknikker (relevant både ved design og verifikation) Teorem: Der findes uendeligt mange primtal Bevis: Antag at der findes et.
Indledende Programmering Uge 5 - Efterår 2006 Om at udvikle korrekte og pålidelige programmer Susanne Lindros.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Induktion og rekursion
Objektorienteret programmering
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Intro Projekttyper v/ Lise Louv, Uddannelsesafdelingen Siden sidst: evaluering på opgaver og virtuel kursus. Kursets ugeforløb læse – forelæsning – øvelsestime.
11.1 Mathiassen, Munk-Madsen, Nielsen & Stage, 2000 © Processer Oversigt, principper og teknikker Kapitel 11.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
Intro Bemærkninger? Præsentation af litteratur: PHP and MySQL Web Development (SAMS) PHP Pocket Reference (O’Reilly) Dictionary of Networking (Sybex)
MMP Model og Metode til Programudvikling – MMP 1 Kursusindhold: Modellering af postkontor Objekt Orienteret Programudvikling - OO* Unified Modelling.
Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse -
Intro til C# apps Kodegennemgang af simpel C# app
Buttom-up parsning: Hvor er vi Mellem- kode Kald til Runtimesys. Mellemk.- optimering Kode- generering Kode- optimering Leksikalsk- analyse Syntax- analyse.
Introduktion til programmering Uge 38 Python 2 Learning Python, kap 8-12.
W1b1 PC baseret analyse og simulering. w1b2 Definition Digital Elektronisk beregningsmaskine, der har intern hukommelse til lagring af program og mellem-regninger.
Sproghistorie Syntaks (struktur) Semantik (Indhold)
1 PC baseret dataanalyse og simulering Week2 A. 2 SAS input/output filer Inddata -textfil - SAS-program -textfil- SAS datasæt SAS system SAS listing -print.
Lektion 7 Læsestof: Kopier fra Caranno
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
Interaktionsformer En begrebsmæssig model kan understøttes med forskellige interaktionsformer Interaktionsformen fastlægger centrale egenskaber: Hvordan.
Procestræ under afvikling af cp init login shell cp cp src dest.
DIEB4.1 Kursusgang 4 Oversigt: Sidste kursusgang Opgaver Aktivitet 2: Generer design (fortsat) Design af interaktionselementer.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Paradigmer i Programmering 1. Program for idag : Funktioner og udtryk i SML : Øvelse : Frokost – 14.00: Deklarative.
FEN KbP/seminar2: design21 Kontraktbaseret programmering Seminar 2 Klassedesign: Immutable lister Queue Shallowcopy og alkvantoren.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Paradigmer i Programmering 1. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
Oprettelse af tabeller (Access, del 2)
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
PD – kursusgang 3 Introduktion til Java Script. Mål Viden om hvordan JavaScripts indlejres i HTML dokumenter Viden om programmering i JavaScript  Erklæring.
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
Semantik, model teori Et (formalt) sprog har ingen mening indtil man interpreterer dets forskellige (korrekte) udtryksformer (vff’s) mhp. en bestemt situation.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmering Exceptions.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering12A.1 Moduler Packages i Java.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Indledende Programmering Uge 6 - Efterår 2006
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
23. juni 2015 Det Semantiske Web Mads Carlsen. 23. juni 2015 Problemer med det nuværende Internet Ingen semantiske specifikationer. Søgning giver mange.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
Jesper Mosegaard Multimedie Programmering E2003 MMProg uge44 Java til Lingo Klasser, statements og lister.
Sproghistorie Syntaks (struktur) Semantik (Indhold)
”Avanceret” Programmering
Programmering.
Quiz Uge 2 – mandag.
ROBOTTERNE KOMMER - OZOBOTTERNE.
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

Introduktion til programmering Programmeringssprog Uge 44 Computer Science, kap 6. Learning Python: kap 13, 14.

Plan  Programmeringsparadigmer  Funktionel programmering i Python  Pause  Scope: ”referencekonteksten”  Oversættelse og kompilering

Generel udviklingstendens  Repræsentation af maskinelle processer  repræsentation af processer i problemområdet  Portabilitet  Væk fra maskinafhængighed (python, java etc.)  Abstraktion, aggregering og indkapsling  Menneske tilpasser sig maskine  maskine tilpasser sig menneske

Naturlige og formelle sprog  Naturlige sprog  Udvikler sig gradvist  Distribueret udvikling  Interpretanten til forhandling  Formelle sprog  Udvikler sig i spring  Python 2.3  Python 2.4  Centraliseret udvikling  Interpretanten ikke til forhandling  SYNTAX ERROR  Fælles træk  Syntaks, semantik, pragmatik  Udvikling afspejler praktiske udtryksbehov

Programmeringsparadigmer

 Imperative / procedurelle  Python, C, FORTRAN, ALGOL  Objektorienterede  python, C++, smalltalk, java  Funktionelle  lisp, ML  Deklarative / logiske  prolog

Programmeringsparadigmer  Et paradigme udtrykker et syn på problemområdet Interpretant paradigmets syn på verden Repræsentation program Objekt problemområde

ITs påvirkning af vores tænkemåde  Når vi konsumerer et medieprodukt er vi nødt til at acceptere interpretanten – præmissen - under konsumprocessen  Den er en forudsætning for konsum  Vi kan ikke se en amerikansk mainstream film med fornøjelse uden i en halvanden time at acceptere den amerikanske fortolkning af verden  Og vi kan ikke bruge et IT-system uden i brugsperioden at acceptere dets syn på verden

Imperative/procedurelle  Interpretant:  Verden består af aktive processer og passive ting  Tingene flyder mellem processerne og skifter tilstand  Programmering  Udform en algoritme der omdanner ting  En algoritme er en sekvens af tilstandsændringer  Ontologi  Subjekt  Objekt  Tekstgenre: narrativ

Objektorienterede  Interpretant:  Verden består af aktive objekter samt af kommunikation mellem disse objekter  Objekterne har metoder tilknyttet  >>> x = ['a','b','c']  >>> x.extend([1,2,3])  Programmering:  lav en struktur af objekter hvis vekselvirkning resulterer i det ønskede resultat  Simuler problemområdet  Ontologi  Subjekt/Objekt ↔ Subjekt/Objekt  Note  Indeholder normalt en procedural komponent (C++, Python)  Understøtter indkapsling og genbrug  Tekstgenre: deskriptiv.

Funktionelle  Interpretant  Verden består af afhængigheder  Inspireret af matematikken  Programmering  Lav et hierarki af funktioner der kalder andre funktioner  Funktion(funktion(funktion(data)))  Ontologi  Input-output  Python har et funktionelt subset  (apply, map, reduce, listcomprehension)

Deklarative  Interpretant  Verden består af sande eller falske sætninger samt af logiske slutningsprocesser  Ontologi  Logisk positivisme  Tekstgenre: argumentativ

Prolog 1: påstande  far(peter,jeppe).  far(peter,lotte).  mor(else,jeppe).  mor(else,lotte).  far(jeppe,estrid).  mor(lotte,erik).  mor(lotte,ida).  han(peter).  han(jeppe).  han(erik).  hun(else).  hun(estrid).  hun(ida).  hun(lotte).

Prologg 2: slutningsregler  farfar(Aeldre,Yngre) :- far(Aeldre,Mellem),far(Mellem,Yngre).  farmor(Aeldre,Yngre) :- mor(Aeldre,Mellem),far(Mellem,Yngre).  morfar(Aeldre,Yngre) :- far(Aeldre,Mellem),mor(Mellem,Yngre).  mormor(Aeldre,Yngre) :- mor(Aeldre,Mellem),mor(Mellem,Yngre).  soen(Yngre,Aeldre) :- han(Yngre),far(Aeldre,Yngre).  soen(Yngre,Aeldre) :- han(Yngre),mor(Aeldre,Yngre).  datter(Yngre,Aeldre) :- hun(Yngre),far(Aeldre,Yngre).  datter(Yngre,Aeldre) :- hun(Yngre),mor(Aeldre,Yngre).

Prolog 3: slutningsregler  bedstemor(Aeldre,Yngre) :- mormor(Aeldre,Yngre).  bedstemor(Aeldre,Yngre) :- farmor(Aeldre,Yngre).  bedstefar(Aeldre,Yngre) :- morfar(Aeldre,Yngre).  bedstefar(Aeldre,Yngre) :- farfar(Aeldre,Yngre).  barnebarn(Yngre,Aeldre) :- bedstemor(Aeldre,Yngre).  barnebarn(Yngre,Aeldre) :- bedstefar(Aeldre,Yngre).  soennesoen(Yngre,Aeldre) :- soen(Yngre,Mellem), soen(Mellem,Aeldre).  datterdatter(Yngre,Aeldre) :- datter(Yngre,Mellem), datter(Mellem,Aeldre).  soeskende(A,B) :- far(X,A), far(X,B), not(A = B).  soeskende(A,B) :- mor(X,A), mor(X,B), not(A = B).

Prolog 4: forespørgsler  1 ?- barnebarn(X,peter).  X = erik ;  X = ida ;  X = estrid ;  2 ?- farfar(peter,X).  X = estrid ;  3 ?- morfar(peter,X).  X = erik ;  X = ida ;  4 ?- soeskende(erik,X).  X = ida ;

Python  Objektorienteret (kommer næste gang)  Proceduralt (Det vi har programmeret indtil videre)  Men med elementer af funktionel programmering.  Kommer nu

Funktionelle træk i Python  Lambda: anonyme funktioner  Et udtryk, ikke en række sætninger  Kan stå steder hvor def ikke kan bruges, f.eks. inline i dictonaries og lister  lambda arg1… argn : hvad skal der gøres  Implementering af kommandointerface  kommando =  { 'plus':(lambda x, y: x+y),  'minus': (lambda x, y: x-y),  ’gange': (lambda x,y: x*y)}  >>> kommando['plus'](3,4)  7  >>> kommando[’gange'](30,50)  1500  >>>

En lommeregner  def Lommeregner():  kommando = {'plus':(lambda x, y: x+y),\  'minus': (lambda x, y: x-y),\  'gange': (lambda x,y: x*y)}  inp = raw_input('tast et udtryk: ')  inp = inp.split()  if inp[0] == 'slut':  return 'slut'  else:  x = int(inp[0])  op = inp[1]  y = int(inp[2])  return kommando[op](x,y)  while True:  resultat = Lommeregner()  if resultat == 'slut':  break  else:  print resultat  >>> Lommeregner()  tast et udtryk: 4 plus 78  82

Output  tast et udtryk: 2 plus 5  7  tast et udtryk: 5 minus 57  -52  tast et udtryk: slut  >>>

Apply  Matcher en funktion med argumenter i form af en tupel  >>> def plus(x,y):  return x+y  >>> apply(plus,(3,4))  7

Map  map( funktion, sekvens ) →[]  Map: anvender en funktion på hvert medlem af en sekvens og returnerer de enkelte resultater i form af en liste  >>> ordliste =('peTer','anDERS','KARL')  >>> def lavnavne(etnavn):  return etnavn.title()  >>> map(lavnavne,ordliste)  ['Peter', 'Anders', 'Karl']  >>>

Reduce  reduce(...)  reduce(function, sequence[, initial]) -> value   Apply a function of two arguments cumulatively to the items of a sequence,  from left to right, so as to reduce the sequence to a single value.  For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates  ((((1+2)+3)+4)+5). If initial is present, it is placed before the items  of the sequence in the calculation, and serves as a default when the  sequence is empty.

Filter  filter ( boolsk funktion, sekvens ) →[]  Anvender en boolsk funktion på hvert medlem af en sekvens og returnerer de medlemmer for hvilken funktionen bliver sand  >>> ordliste =('peTer','anDERS','KARL','poul','anni')  >>> def checknavne(etnavn):  return etnavn.startswith('p')  >>> filter(checknavne,ordliste)  ('peTer', 'poul')  >>>

List comprehensions  [udtryk for var in sekvens ] →[]  Syntaks:  [Udtryk for variabel in sekvens if betingelse]  Beregner udtryk, hvis betingelse er sand, for en variabel der sættes til at referere til alle medlemmer af sekvensen.  >>> [x*2 for x in [1,2,-3,0,-4] if x > 0]  [2, 4]  Effektivt, kort, men uforståeligt!

Pause  Pause

Scope

 Scope = samtalekontekst  Namespace = interpretant der angiver hvad navne står for  I Python: en slags dictionary hvor navne er knyttet til objekter  {’A’:integerobjekt, ’B’: funktionsobjekt,…}  Namespaces er knyttet til kontekster – lige som i naturlige sprog

Hvad betyder et navn?  Samtalekonteksten og tidsforløbet afgør hvad en repræsentation (et navn) repræsenterer.  Det danske samfund:  ”Anders Fogh” betegner statsministeren (desværre stadigt)  Vi kan bruge ”Fogh” som henvisning til statsministeren: ”Fogh”  statsministeren  Familiesammenkomst (del af det danske samfund):  Hvis intet andet er sagt gælder reglen stadig. ”Fogh har en del bøvl med sine ministre i øjeblikket”  Men hvis der kommer en replik  ”Kan I huske Købmand Fogh”  ”Ja, ja”  ”Fogh har lige solgt sin forretning”  Så etableres referencen  ”Fogh”  købmanden

I naturlige sprog  Referencen afgøres af  Egenskaber ved objektet (han/hunkøn, andre egenskaber)  Hvornår objektet sidste blev omtalt og hvor vigtigt det er  Om der er nævnt andre kvalificerede objekter imellem taletidspunktet og sidste omtale  Eksempel  ”Prøv at se den mand derovre  ”Ja, han (manden derovre) er noget nervøs”  ”Men se så ham bagved”  ”Han (manden bagved) ser mere ud til at have kontrol over tingene”.

Scope i Python  Lokale navne bruges i funktioner  De forsvinder når funktionen er kørt færdig  Der er 4 samtalekontekster  Indbyggede navne (open, range, etc)  Modulet (globale): navne der er blevet tilskrevet (A = 9) en reference i modulet eller er blevet erklæret globale  Lokale navne i omgivende funktioner  Lokale navn i funktionen: navne der er blevet tilskrevet en reference i modulet

Fastlæggelse af reference i Python  Har navnet fået en værdi i denne funktion  Ja: navnet refererer til denne værdi  Nej: Har navnet fået en værdi i en indesluttende funktion:  Ja: navnet refererer til denne værdi  Nej: har navnet fået en værdi i modulet eller er det blevet erklæret global?  Ja: navnets værdi er denne værdi  Nej: findes navnet som indbygget navn?  Ja: navnet har det indbyggede navns værdi  Nej: fejl. def laegentil(x): x = x+1 return x

Eksempel  >>> x = 10  >>> def laegentil(x):  x = x+1  return x  >>> laegentil(x)  11  >>> x  10  >>> def laegentil(y):  global x  x = y+1  return x  >>> laegentil(x)  11  >>> x  11 Global lokal Global

Call by value, call by reference  Python: call by reference er default  Call by value kræver at parametren eksplicit er en kopi  >>> def FjernFoerste(enListe):  del enListe[0]  return enListe  >>> minListe = [1,2,3]  >>> from copy import *  >>> resultat1 = FjernFoerste(copy(minListe))  >>> resultat1  [2, 3]  >>> minListe  [1, 2, 3]  >>> resultat1 = FjernFoerste(minListe)  >>> minListe  [2, 3]  >>>

Aktuelle og formelle parametre  Eksemplet igen  def FjernFoerste(enListe):  del enListe[0]  return enListe  Nyliste = FjernFoerste(minListe)  Ved kaldet sættes de formelle parametre til at repræsentere den værdi de aktuelle parametre repræsenterer  Formel parameter = aktuel parameter  EnListe = minListe

Forskellen R: enListe R:minListe O: [1,2,3] R: enListe R: minListe O [1,2,3] Call by value: i Python må man eksplicit kopiere Call by reference: default i Python

Oversættelse og kompilering

 Oversættelse fra et sprog til et andet  Transformation af program  Eks. fra C++ til maskinkode  Fra python kildekode til python bytecode  Først lexikalsk analyse  Så syntaktisk analyse  Resultat: parsetræ  Så kodegenerering ud fra parsetræet

Leksikalsk analyse  Leksikalsk analyse.  Opdeling af kildekode-tekstfilen i en række tokens  Tokens er reserverede ord og variable samt funktioner/operatorer  Eks  ‘=’ ‘print’ ‘minVariabel’ -> ASSIGN, PRINT, VAR  Variabelnavne må ikke starte på et tal  >>> 1bil = 'Volvo'  SyntaxError: invalid syntax  >>> enbil = 'volvo'

Leksikalsk analyse  Nøgleord (if, then,…)  >>> if = 'peter'  SyntaxError: invalid syntax  Reserverede ord  If er et reserveret ord  Int er ikke et reserveret ord (data type)  >>> int = 1  >>> int  1  Nu virker int(’10’) ikke mere!  Så pas på! Hvis ordene bliver lilla i IDLE er det et indbygget ord som kan ændres, men som ikke bør ændres uden en specifik grund. Reserverede bliver orange

Syntaktisk analyse  BNF - Backus-Naur-form  Samme udtrykskraft som Chomsky’s kontekst-frie grammatik  S ::= N VP  NP ::= N | N som VP | at S  VP ::= VT NP | VI  N ::= Anders | Bent | Christina  VT ::= så | hørte  VI ::= løb | sov | lo

Fragment af Python  stmt::= simple_stmt | compound_stmt  simple_stmt::= small_stmt (';' small_stmt)* [';'] NEWLINE  small_stmt::= expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt |  global_stmt | exec_stmt | assert_stmt  print_stmt::= 'print' ( [ test (',' test)* [','] ] | '>>' test [ (',' test)+ [','] ] )  del_stmt::= 'del' exprlist  pass_stmt::= 'pass'  flow_stmt::= break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt  break_stmt::= 'break'  continue_stmt::= 'continue'  return_stmt::= 'return' [testlist]

BNF og syntaksdiagrammer  Expr ::= Term [Op Expression]  Op ::= +|-  Syntaxregler er ofte rekursive TermExpressionOp Expression + - Op

BNF og syntaksdiagrammer  S ::= N VP  NP ::= N | N som VP | at S  VP ::= VT NP | VI  N ::= Anders | Bent | Christina  VT ::= så | hørte  VI ::= løb | sov | lo NP N VP S at som

Parsning  Analyse af om tokensekvensen overholder sprogets syntax  Assign ::= Var ‘=’ Expression  Expression ::= Var | Var ‘+’ Var | Var ‘+’ Digit | Digit ‘+’ Digit  Var ::= a|b|c|...|z  Digit ::= 0|1|2|...|9  a = a+4  a = 3+4  b = 3+5  Opbygning af parsetræer

Syntakstræ formelt sprog Assign Var a Expression Var+Digit a3 a = a+3 =

Syntakstræ dansk  S ::= N VP  NP ::= N | N som VP | at S  VP ::= VT NP | VI  N ::= Anders | Bent | Christina  VT ::= så | hørte  VI ::= løb | sov | lo S N VP VT NP N AnderssåBent

Syntakstræer  Fjern denne flertydighed  If (Boolean1): If (Boolean2): Statement1 else: Statement2  Skal statement2 udføres når Boolean1 er falsk eller når Boolean1 er sand og Boolean2 er falsk?

Fast og frit format  Formatfrie sprog (de fleste)  Problemet løses med forskellige former for paranteser  If (Boolean1): {If (Boolean2): Statement1} else: Statement2  If (Boolean1): {If (Boolean2): Statement1 else: Statement2 }  Sprog med fast format  Problemet løses med indentering

Python  fast format. Bruger indentering  >>> def syntakstest(navn):  if navn[0] == 'peter':  if navn[1] == 'andersen':  print 'det var peter andersen'  else:  print 'fornavnet var ikke peter’  >>> def syntakstest1(navn):  if navn[0] == 'peter':  if navn[1] == 'andersen':  print 'det var peter andersen'  else:  'fornavnet var ikke peter'

Semantisk analyse  Er alle variable synlige?  Check scope og namespace  Er typen af variablen forenelig med de operationer der skal udføres på den?  I stærkt typede sprog: kan gøres nu  Utypede sprog som Python: kan først checkes under udførelsen

Kode generering  Højniveaukode  X ← y + z  W ← x + z  Maskininstruktioner (optimering)  Load y i R1  Load z i R2  Add R2 til R1 (R1 = y + z)  Store R1 i x  Load x i R1  Load z i R2  Add R2 til R1  Store R1 i w Overflødigt

Adgang til MySQL serveren  Hvis i logger på nettet med det login og password i har fået til MySQL- serveren skulle i gerne blive opfattet som ansatte i stedet for studerende og vil derfor have adgang til MySQL- serveren

Næste gang  UML distilled kapitel 3 (4 i 2nd ed.)

Opgave  Valgfri opgave med rekursion