15 September, 19991 Lexikala element mm Eftersom C är ett språk, har det ett alfabet och regler för hur bokstäverna kan bilda ord och hur olika strukturella.

Slides:



Advertisements
Liknande presentationer
INTRODUKTION TILL PROGRAMMERING
Advertisements

F2 - Intro till Java1 Föreläsning 2 - Intro till Java  Sammanfattning av Lektion 1 (kap 2): • Vad behövs för att kunna programmera? • DrJava • Java •
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
hej och välkomna EKVATIONER Ta reda på det okända talet.
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
De fundamentala datatyperna
Operatorer.
Föreläsning 2. Operatorer Tilldelning Kodblock { } if – satsen Logiska uttryck Att programmera.
Om Java C =>Java syntax variabler metoder färdiga klasser
Välkommen Vahid Mosavat
Programmeringsteknik K och Media
Växjö 21 april -04Språk & logik: Kontextfria grammatiker1 DAB760: Språk och logik 21/4: Kontextfria 10-12grammatiker Leif Grönqvist
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Växjö 15 april -04Språk & logik: Reguljära uttryck1 DAB760: Språk och logik 15/4: Finita automater och 13-15reguljära uttryck Leif Grönqvist
Grammatiska exempel Förklaringar av uttryck i BNF-form.
Flödeskontroll Satser i ett program utförs en och en efter varandra. Detta kallas sekvensiell flödeskontroll. Ofta är det dock nödvändigt att modifiera.
Programmering B PHP Lektion 2
Programmering B PHP Lektion 3
Pekare och speciell programstruktur i inbyggda system
Repetition inför slutprovet
Programmeringsbegrepp
Programmering B PHP Lektion 2
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Internet A Javaskript.
Programspråk Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande program och kompilerande program. Python är ett interpreterande.
Grundläggande programmering
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Modulär programutveckling
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax Flertydighet i kontextfri.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Digitalitet.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Repetitionssatser: do-satsen och for-satsen -Operatorer:
Anders Broberg, Programspråksteoridelen DVA Moment 2 1 Epost: Hemsida: Tel: Rum: D438.
2D1311 Programmeringsteknik med PBL Föreläsning 1 Skolan för Datavetenskap och kommunikation.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Föreläsning 2 2D1312 Introduktion till Python Kap 1 och 2 i kursboken.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 5: Syntaxanalys (parsning) Syntaxanalysens mål Tillvägagångssätt och komplexitet Syntaxanalys.
Kronljusströmställaren 0, 1, 2, 3
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
Programmering i.NET Farid Naisan, Universitetsadjunkt Datavetenskap, Teknik och samhälle, Malmö högskola Begreppsförklaring.
OOP&M - teori1 OOP&M – Föreläsning 3 kap 2-4 Repetition Föreläsning-datayper-syntax-tilldelning.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 4: Syntaxdefinition Formell syntaxdefinition Lexikalisk och kontextfri syntax.
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Att räkna med bokstäver
Python.
Föreläsning 2 Programmeringsteknik DD1310
Presentationens avskrift:

15 September, Lexikala element mm Eftersom C är ett språk, har det ett alfabet och regler för hur bokstäverna kan bilda ord och hur olika strukturella enheter skiljs åt. Detta kallas språkets syntax. Kompilatorn kollar så att syntaxen i programmet är korrekt. För en människa så är en C-källkod en två-dimensionell struktur, men för en kompilator är det en följd av bokstäver som översätts till objektkod, som i sin tur blir översatt till maskinkod för den aktuella maskinen. Efter att preprocessorn (som man kan tänka sig vara en del av ”kompilatorn”) är klar, så samlas bokstäverna i programmet till sk tokens.

15 September, Bokstäver och lexikala element Exempel på bokstäver som kan användas i ett C-program är följande: små bokstäver a b c...z stora bokstäver A B C...Z siffror övriga tecken + - * / = ( ) [ ] ’ ” # $ % _ | \., ; : ? ”osynliga” tecken som mellanslag, nyradstecken och tabulatortecken. små bokstäver a b c...z stora bokstäver A B C...Z siffror övriga tecken + - * / = ( ) [ ] ’ ” # $ % _ | \., ; : ? ”osynliga” tecken som mellanslag, nyradstecken och tabulatortecken.

15 September, Syntax regler Vi ska använda ett grammatiksystem för att beskriva C:s syntax (appendix B). Det kallas Backus-Naur Form (BNF) och är en kontext-fri grammatik som utvecklades i början av 1960-talet av John Backus och Peter Naur för att beskriva programmering- språket ALGOL 60 (används numera inte alls). BNF räcker inte riktigt till att beskriva alla korrekta strängar i C, men med vissa utökningar kan den användas. Grammatiken består bl.a. av produktioner (eller regler) som producerar korrekta C strängar.

15 September, Symboler i vår grammatik kursiv stil Indikerar syntaktisk kategori ::= ”Ska skrivas som”-symbol | Eller {} 1 Välj en av posterna inom krullparenteserna {} 0+ Upprepa posten inom krullparenteserna 0 eller fler gånger {} 1+ Upprepa posten inom krullparenteserna 1 eller fler gånger {} opt Valfri post andra poster är slutsymboler i språket kursiv stil Indikerar syntaktisk kategori ::= ”Ska skrivas som”-symbol | Eller {} 1 Välj en av posterna inom krullparenteserna {} 0+ Upprepa posten inom krullparenteserna 0 eller fler gånger {} 1+ Upprepa posten inom krullparenteserna 1 eller fler gånger {} opt Valfri post andra poster är slutsymboler i språket

15 September, Exempel Kategorin letter_or_digit letter_or_digit ::= letter | digit letter ::= lowercase_letter | uppercase_letter lowercase_letter ::= a | b | c |...| z uppercase_letter ::= A | B | C |...| Z digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 letter_or_digit ::= letter | digit letter ::= lowercase_letter | uppercase_letter lowercase_letter ::= a | b | c |...| z uppercase_letter ::= A | B | C |...| Z digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Kategorin alphanumeric_string alphanumeric_string ::= {letter_or_digit} 0+ Vi ser att t.ex. strängarna ”3”, ”ab777c” och null-strängen ”” är alla alfanumeriska strängar.

15 September, Kommentarer För att underlätta att läsa ett program och för att kunna lägga in små förklaringar varför man gör som man gör, så finns det i C möjlighet att lägga in kommentarer. En kommentar börjar med /* och slutar med */. Allt däremellan ignoreras av kompilatorn. Kommentarer är viktiga och ska skrivas då man kodar sitt program (första gången) /* a comment */ /*** another comment ***/ /*****/ /* * Yet another comment */

15 September, Nyckelord Vissa ord är reserverade och kan inte användas som t.ex. variabelnamn autodogoto signed unsigned breakdoubleif sizeof void caseelseint static volatile charenumlong struct while constexternregister switch continue float return typedef defaultforshort union autodogoto signed unsigned breakdoubleif sizeof void caseelseint static volatile charenumlong struct while constexternregister switch continue float return typedef defaultforshort union Redan existerande funktionsnamn som t.ex. printf() bör ej defineras om.

15 September, Identifierare En identifierare består av en sekvens av bokstäver, siffror och/eller det speciella tecknet _ (eng. underscore). De flesta C system skiljer på små och stora bokstäver I variabelnamn (case sensitive). Dvs. temp är inte samma variabel som Temp eller tEmp osv. Exempel på identifierare är k, _id, iamanidentifier2, soami men inte not#me, 101_south eller -plus. identifier ::= {letter | underscore} 1 {letter | underscore | digit} 0+ underscore ::= _ identifier ::= {letter | underscore} 1 {letter | underscore | digit} 0+ underscore ::= _

15 September, Konstanter Det finns olika typer av konstanter i C. Heltalskonstanter som t.ex. 0 och 17 och flyttalskonstanter som t.ex. 1.0 och Det finns dessutom teckenkonstanter som t.ex. ’a’, ’b’ eller ’+’. och som vi ska se i kapitel 3 Vissa teckenkonstanter som ’\n’ (newline) har en speciell mening. Trots att de skrivs med två tecken (\ och n) så representerar de ett enda tecken i C. decimal_integer ::= 0 | positive_decimal_integer positive_decimal_integer ::= positive_digit {digit} 0+ positive_digit ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 decimal_integer ::= 0 | positive_decimal_integer positive_decimal_integer ::= positive_digit {digit} 0+ positive_digit ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

15 September, Konstanter Exempel på heltalskonstanter är 0, 77 och Men t.ex. 017 är inte samma sak som 17, därför att heltal som börjar med 0 tolkas som skrivna med basen 8, dvs oktala. Man kan också ange tal i hexadecimal form (bas 16), t.ex. OxF3 eller OxA2. Negativa tal (t.ex. -33 ) räknas som konstanta uttryck.

15 September, Sträng konstanter En sekvens tecken omslutna av citationstecken räknas som en strängkonstant. I kapitel 6 så kommer vi att se att strängar lagras som en endimensionell vektor med tecken. Strängar med en bokstav är inte samma sak som tecken, dvs ”a” (sträng) är inte samma sak som ’a’ (tecken). Om man vill ha med ” i en sträng så måste den förekommas av en \. Samma gäller om man vill ha med \ i en sträng, då skrivs den som \\. Exempel på strängar är ”text”, ”” (tomma strängen), ” /* not a comment” och ”\”hej\”” ( ”hej” ). Däremot är t.ex. /* ”text” */ inte en sträng.

15 September, Operatorer De aritmetiska operatorerna är + (plus), - (minus), * (multiplikation), / (division), % (modulus). Normalt så skriver man a + b (mellanslag för att öka läsligheten) men det är tillåtet att skriva a+b. Vissa symboler har olika betydelse i olika sammanhang. T.ex. så har % olika betydelser i printf(”%d”, a); och i a = b % 7; Parenteser, krullparenteser, komman och semikolon fungerar som avdelare. T.ex. så kan parenteser bestämma prioriteten vid beräkningar.

15 September, Prioritet och associvitet Det finns regler för vilken prioritet och associvitet olika operatorer har. Eftersom uttryck inom parenteser utvärderas först kan parenteser användas för att ändra eller klargöra i vilken ordning operationer utförs * 31 + (2 * 3)(1 + 2) * (((1 + 2) - 3) + 4) -5

15 September, Prioritet/Associvitet

15 September, Öka/Minska operatorer Vissa operationer är så vanliga att speciella operatorer har skapats. Dessa operatorer är dessutom ofta implementerade som endast en maskininstruktion => väldigt snabb ++ operatorn ökar värdet på en variabel med 1 och -- operatorn minskar värdet med 1. Båda operatorerna kan användas som postfix eller prefix operatorer. Om du använder postfix (t.ex. a++ ), så ökas värdet efter satsen är utförd, medan ++a ökar värdet innan.

15 September, Exempel a: 4 b: 5 a: 5 b: 5 Ger följande resultat:

15 September, Tilldelning Tilldelning är också en operator i C. = har låg prioritet och är höger-vänster associativ. b = 2; c = 3; a = b + c; a = (b = 2) + (c = 3); /* ovanligt men korrekt */ a = b = c = 0; a = (b = (c = 0)); k = k + 2; k += 2;

15 September, Tilldelnings-operatorer Som det nämnts tidigare så finns det många kombinationer av tilldelning och beräkningsoperatorer. = += -= *= /= %= >>= <<= &= ^= != int i=1, j=2, k=3, m=4;