Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):



Relevanta dokument
Principer för (imperativa) programmeringsspråk

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Läsöversikt. Föreläsningar 2-6. Genomförande av laborationer

Språket Python - Del 1 Grundkurs i programmering med Python

Föreläsning 2 Programmeringsteknik och C DD1316

TDIU01 - Programmering i C++, grundkurs

Imperativ programmering. Föreläsning 2

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Parameteröverföring. Exempel. Exempel. Metodkropp

Övningsuppgifter kapitel 8

SMD 134 Objektorienterad programmering

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Föreläsning 3: Booleans, if, switch

Planering av ett större program, del 2 - for och listor. Linda Mannila

Programmeringsteknik I

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Funktioner. Linda Mannila

Språket Python - Del 2 Grundkurs i programmering med Python

Användarhandledning Version 1.2

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

DD1314 Programmeringsteknik

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Introduktion till programmering och Python Grundkurs i programmering med Python

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Programmeringsteknik med C och Matlab

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Grundläggande datalogi - Övning 1

TDIU01 - Programmering i C++, grundkurs

Föreläsning 3-4 Innehåll

DD1361 Programmeringsparadigm. Carina Edlund

Innehållsförteckning

Användar- och systemdokumentation

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson.

Exempel på ett litet Ada-program

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

C++ - En introduktion

Föreläsning 3. Iteration while-satsen

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Erfarenheter från labben

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Variabler och konstanter

MicroPython Ett textbaserad programmeringsspråk för Micro:bit

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Visual Basic, en snabbgenomgång

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Programmering för språkteknologer I, VT2012. Rum

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Programmering A. Johan Eliasson

Introduktion C-programmering

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Tentamen i Introduktion till programmering

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Repetition C-programmering

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Planering Programmering grundkurs HI1024 HT 2014

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Föreläsning 6: Metoder och fält (arrays)

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Classes och Interfaces, Objects och References, Initialization

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

F4. programmeringsteknik och Matlab

729G04 Programmering och diskret matematik. Python 3: Loopar

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Föreläsning 2. Operativsystem och programmering

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Iteration while-satsen

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Problemlösning och funktioner Grundkurs i programmering med Python

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Kompilatorer och interpretatorer

TDP002 - Imperativ programmering

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Transkript:

Översikt Motivering Syntax och semantik Imperativa språkets byggstenar och Python Datatyper Tilldelning och uttryck Kontrollstrukturer (på satsnivå) Subprogram Relaterade avsnitt: PL 3.1-3.2, 5.1-5.3, 5.8 intro, 6.1-6.3, 7.1-7.3, 8.1-8.3, 9.1-9.2, 9.5.2.4 Varför lära sig detta? PL-boken Kap 1 (repetition): Förmåga att uttrycka sig, förmåga att välja språk, snabbare inlärning, förståelse för implementation, ökad insikt om språk En hantverkare kan sina verktyg Alla programmerare bör ha implementerat ett eget språk som minimum Förståelse för vad som krävs för att implementera ett datorspråk är användbar kunskap för alla program Även t ex en modul av funktioner kan ses som ett språk

Motiverande exempel Exempel på ett korrekt uttryck i Python: numb1 > 3 and numb2!= 4 Syntax och semantik Exempel på ett inkorrekt uttryck i Python: numb1 > 3 and numb2 Fråga: Vår Pythontolk måste ha en algoritm i sig som kan särskilja dessa två fall. Hur ser en sådan algoritm ut? Steg 1: Vi behöver detaljerad förståelse för språkets syntax och semantik Begreppen syntax och semantik Python vs Java en skillnad i syntax... Syntax: formatet på språkets konstruktioner Python: Java: Semantik: betydelsen hos språkets konstruktioner Varje programspråk har sin egen unika syntax Paradigm: språken har en gemensam semantisk kärna men kan variera i olika detaljer I våra kurser: Vi lär oss principerna så kan vi paradigmet Språket som vi väljer är ett exempel...om än valt med omsorg villkor iteration Men då måste vi lära oss se principerna i exemplet...men i många avseenden samma semantik

Hur beskriva ett programmeringspråks syntax? Ett språk kan ses som en mängd strängar/meningar/satser Ett programmeringsspråk är ett formellt språk Formella språk är definierade av syntaxregler Formella språk är enkla att hantera med algoritmer Exaktheten ger enkelhet för datorn (svårighet för människan...) Parser/igenkännare Algoritmer som avgör om givna satser är korrekta eller ej Lexem: grundläggande klassificering av strängar Tokens: gruppering av lexem i principiella roller t ex identifierare. Använder normalt en formell grammatik Backus-Naur-Form: grammatisk formalism för syntax (seminarium 3) Hur beskriva semantiken för ett programmeringsspråk? Hur exekveras ett Pythonprogram? Grundläggande bild: Formella metoder matematiskt avancerade modeller Inte i denna kurs, men nämns några i PL-boken Pragmatisk metod Interpretator 1) kör aktuell sats 2) stega fram KP I/O OS, etc 1. lär dig hur interpretatorer och kompilatorer fungerar i stora drag Programmoduler Kontrollpunkt (KP) 2. Lär dig informellt vad som händer för olika konstruktioner En sådan modell kallas ibland för operationell semantik. I detta fall för ett s k interpreterat språk.

Hybridmodellen Källkod Lexikalanalys Syntaxanalys Imperativa språkets byggstenar Intermediär kodgenerator Intermediär kod Interpretator Indata Resultat Namn Namn kallas ofta identifierare Identifierar variabler, moduler, funktioner etc Exempel på designval: känslighet för stor/liten bokstav Nyckelord som inte får vara identifierare Konventioner: särskilj delar av namnet med _ eller kamelnotation. Python: _ eller bokstav + sekvens av _, bokstav, siffra Skillnad på stor och liten bokstav. For inte vara ett reserverat ord, t ex for, break, def Variabelbindning Identifierare bindning Minnesadress Typ: värde Variabler har namn, typ och värde Variabelbindning är associationen mellan namnet och dess typ+värde

Heap: Python-objektens minnesarea Variabelomgivning <id>: myvar1 <id>: myvar2... Minneshanterare Heap: Skräpsamlare (GC) Variabelomgivningen består av aktuella identifierare På Heap lagras skapade objekt antal och storlek ibland okänt binär representation refereras/skapas via uttryck Skräpsamlare Garbage Collector Räckvidd (engelska: scope) Det räckvidd av satser där en identifierare/variabel är möjlig att synlig/refererbar Variabler är lokala i ett källkodsblock om de införts där. Icke-lokala variabler är variabler som är nåbara trots att de införts lokalt Skuggning måste hanteras så att man kan hålla isär på icke-lokala och lokala variabler Variablers räckvidd i Python Variabler har begränsad räckvidd Globala variabler i modulen lokala variabler i nuvarande funktion Satsblock markeras i Python med indentering samma indentering i följd samma block markerar en svit av satser som ska exekveras tillsammans I explicit typade språk t ex Java/C++ är räckvidd och block förbundna...men inte i Python När och hur får lokala variabler värden? Funktioner kan definieras nästlat i varandra Omgivande (enclosing) funktion Lokala variabler har s k statisk räckvidd Vi kan referera till variabler i funktionen som är kontext LEGB-regeln: Built-in Global Enclosing Local

Ett exempel var = hej def foo(): print var def foo1(): var = 7 def foo2(): global var var += hopp def foo3(): var = hoppsan import mymodule mymodule.var += var Skriv ut icke-lokala variabeln var Lokal variabel införs som sedan skuggar den globala Explicit referens till global variabel Möjlighet att referera variablerna i samma omfång Datatyper En mängd datavärden som samlat för ett visst syfte Primitiva datatyper: värden består inte av värden av annan typ Tal, tecken och Booleska typer Strängar ett gränsfall I Python: taltyperna och boolean Sammansatta datatyper: typer som inte är primitiva Arraytyper och associativa arrayer/hashes viktiga exempel I Python: sekvenstyper och Dictionary Dynamiska datatyper: minnestilldelningen sker vid körtid Python har dynamiska datatyper Uttryck Evaluering av uttryck Aritmetiska uttryck oftast likartat i alla imperativa språk Booleska uttryck lite mer syntaxskillnader Precedence: vilken operator ska appliceras först Ex: 1 + 3 * 4 Vänster/höger-ssociativitet: vilken ordning operatorer med samma precedence ska appliceras Ex: 1 + 2 + 3 Överlagrade operatorer: samma symbol fungerar för många typer Uttryck/term: Trädstruktur: 1 (1 + ( 3 * 4)) / 2 / + 2 * 3 4 Trädstrukter används för att representera uttryck Evaluering av ett uttrycks görs av algoritmer som traverserar trädet Enklast nerifrån och upp och kom ihåg delresultaten T ex + i Python för både tal och strängar T ex som lista av listor:

Python: Booleska och relationsoperatorer Booleska uttryck i Python Booleska operatorer not negation and logisk och or logisk eller Booleska konstanter True värde 1 sant False värde 0 falskt Relationsoperatorer x == y likhet x!= y icke-likhet x < y mindre än x > y större än x <= y mindre eller lika x >= y större eller lika x = 1 y = 2 x < y # True (x >= (y 1)) # True (x > (y 1)) # False (x!= y) # True (y == x) # False (y == (x * 2)) # True (x > y) or (x!= y * 2) # True not ((x < y) and (x!= y)) # False Tilldelningssatsen Exempel på enkla satser i Python Enkel tilldelning: variabel tilldelas uttryckets värde Semantik: identifieraren binds till uttryckets värde Sammansatt tilldelning: +=, -= etc Sekvenstilldelning: flera variabler får värden samtidigt Kan användas för att undvika temporär variabel vid swap Tilldelning är exempel på en enkel sats. print del break return Instruktioner Atomär kontroll Kommandot reserverat ord/symbol Enkla satser = kommandoskript

Programmets kontrollflöde Kontrollflöde: ordningen som programsatserna exekveras i Kontrollflödet kallas ibland dynamisk struktur För rak sekvens av (enkla) satser: uppifrån och ner if, while, for styr detta flöde - olika flöden vid val/villkor Kontrollpunkt: kallas ibland den punkt där programmet befinner sig vid ett visst ögonblick på maskinkodsnivå: program räknaren håller adressen till nästa sats som ska exekveras Vid subprogram (funktioner) måste anropsposition sparas, dvs vi behöver en s k anropsstack Kontrollsatser Satser vars syfte är att styra programflödet Sammansatta kontrollsatser styr lokalt inom sig T ex villkor och loopar Enkla kontrollsatser utgör del av andra konstruktioner T ex return och break Villkor: innehåller 1, 2, eller fler villkorade klausuler Iterativa satser: definitiva och indefinita loopar Normalt for och while-loop Kontrollflöden för if-sats Taxonomi över viktigaste satstyperna i Python 1 2 3 4 5 6 7 8 9 10 11 12 13 x = 13.7 y = 14.5 z = 19.0 if x > y: if x > z: max = x else: max = z else: if y > z: max = y else: max = z 1 2 3 4 9 10 12 13 exit x = 22.3 y = 14.5 z = 27.0 1 2 3 4 5 7 8 exit Atomära Instruktioner tilldelning print uttryckssats... Enkla Atomär kontroll return break raise Satser Villkor if if [elif] else Komplexa Loop while for Innehåller andra satser subprogram funktioner Utförande satser Kontrollsatser

Subprogram Namngivna källkodsblock Subprogram definieras och anropas Vi skiljer på definitionshuvud och definitionskropp Parametrar används för skicka med indata vid anrop Returvärde används för att skicka med utdata vid retur från subprogram Funktion och procedur Två typer av subprogram OBS: dessa begrepp används lite olika av olika författare/språk Funktion: ett subprogram som returnerar ett värde Procedur: returnerar inte ett värde I Python värdet None Funktioner kan ingå som del i uttryck Sidoeffekt: effekter förutom returnerat värde t ex om subprogrammet skriver ut på konsol parametrar av referenstyp (mer detaljer senare) en ren funktion har inga sideffekter procedurer har bara sideffekter Funktionell procedur : både returvärde och sideffekter I Python modulen består av satser Parametrar och argument Rätt: def for return def print Fel: print def return (Formella) parametrar i en definition beter sig som lokala variabler i funktionen binds på nytt vid varje anrop frigörs från bindning vid anropets slut (Aktuella parametrar) argument i ett anrop består av uttryck argumentets värde överförs till parametern

Anrops stack Anropsstacken def print def print print (4) (5) (1) (2) (3) Vid varje anrop av en funktion skapas en variabelomgivning Anropen läggs på en s k anropsstack med funktionsomgivningar Test() x = 'hej' Test() x = 'hej' Test2(y) y = 'hopp' Test2(y) y = 'hopp' Test2(y) y = 'hopp' (1) (2) (3) (4) (5) Kontrollflöde hej \n hej Metoder för parameteröverföring Tekniken som används för att tilldela parametrar värden av argument-uttryck Olika språk har olika principer (det finns 3-4 vanliga) C++ kommer visa på en annan variant än Python I Python: genom objekt-referens även kallat genom tilldelning (LP-boken: pass-by-reference) argumentutryckets värde är en objekt-referens den tilldelas parametern Innebär strukturdelning för muterbara strukturer Exempel: önskad sideffekt Exempel: blockera sideffekt - kopiera def def if return print print

Summering Algoritmisk förståelse den djupaste förståelsen Syntax och semantik BNF och operationell semantik Namn binds, har räckvidd, dynamiskt på heap Datatyper primitiva och sammansatta Uttryck precedence, associativitet, överlagring och uträkning Tilldelning: enkel och sammansatt, värde binds till identifierare Kontrollstrukturer: styr programflödet Subprogram/