Några fakta om Standard Pascal. Serafim Dahl, Carina Edlund, m.fl.

Relevanta dokument
Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Pascal... Pascal. Pascal... Pascal...

Standardfilerna Input och Output

Standardfilerna Input och Output. Filer... Filer... vanlig utbyggnad för ökad dynamik. Filer... filtyper

Exempel på ett litet Ada-program

Översikt över Visual Basic

Tentamen Grundläggande programmering

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

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

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.

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

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

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

TDIU01 - Programmering i C++, grundkurs

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

2D1310 Programmeringsteknik Tentamen (1p) lördag 29 april 2000 kl 14-17

Variabler och konstanter

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Imperativ programmering. Föreläsning 2

Datatyp - mera. Begreppet värde, igen. Ett slags mått på en egenskap, eller något fenomen. Ska ges en bred tolkning!

Kontinuerliga listor. Fält (listor) Kontinuerliga listor... Kontinuerliga listor...

Visual Basic, en snabbgenomgång

SMD 134 Objektorienterad programmering

Några saker till och lite om snabbare sortering

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

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

TDIU01 - Programmering i C++, grundkurs

Enkla datatyper minne

Obligatorisk uppgift 5

TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

GOTO och lägen. Några saker till och lite om snabbare sortering. GOTO och lägen (3) GOTO och lägen (2)

Programmeringsteknik med C och Matlab

Parameteröverföring. Exempel. Exempel. Metodkropp

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

Minnestilldelning (allokering) och frigörande (avallokering) av minne

Logik och kontrollstrukturer

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Föreläsning 5: Introduktion av pekare

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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

Föreläsning 6: Introduktion av listor

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

(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

Beräkningsvetenskap föreläsning 2

Uppgift 1 ( Betyg 3 uppgift )

5 Grundläggande in- och utmatning

Övning från förra gången: readword

2.4. Teckensträngar och logiska uttryck

Data, typ, selektion, iteration

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet

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

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

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

DD1314 Programmeringsteknik

Övningsuppgifter kapitel 8

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

6.1 Kompilering och lite grundläggande information

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Programmeringsteknik med C och Matlab

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

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

KOMPLETTERANDE HEMTENTAMEN TDDB53

TDDC77 Objektorienterad Programmering

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

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

Twincat: PLC Control

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

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

Datalogi, grundkurs 1 Övningsuppgifter i Pascal. Serafim Dahl, Carina Edlund, Kjell Lindqvist m.fl.

Typkonvertering. Java versus C

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat

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

Sista delen av kursen

Programspråkslingvistik. Sista delen av kursen. Ett programspråk

Introduktion till MATLAB, med utgångspunkt från Ada

C++ - En introduktion

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

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

Inlämningsuppgift MiniPlotter

Övning2. Variabler. Data typer

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

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

Funktioner, Procedurer och Parametrar. Funktioner, Procedurer och Parametrar... Funktioner, Procedurer och Parametrar procedurspecifikation

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

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

Introduktion till MATLAB

Deklarationer/definitioner/specifikationer

Obligatorisk uppgift: Numerisk kalkylator

Föreläsning 3-4 Innehåll

Programmering A. Johan Eliasson

Objektorienterad Programmering (TDDC77)

Transkript:

Några fakta om Standard Pascal Serafim Dahl Carina Edlund m.fl. Hösten 2008

Några fakta om Standard Pascal 1 Fördefinierade procedurer och funktioner Typer som anges i denna sammanställning hänför till den i nästa avsnitt redovisade taxonomin över Pascals datatyper och har inte säkert en motsvarighet i Pascals typsystem utan kan motsvaras av en hel mängd möjliga typer. Abs(x: real): real eller Abs(x: Integer): Integer beräknar absolutvärdet av x. ArcTan(x: real): real beräknar det aritmetiska värdet arctangens x där x är uttryckt i radianer. Chr(i: integer): char returnerar det tecken som har ordningstalet i enligt den aktuella teckenkoden. Det blir ett felavbrott om det inte finns något sådant tecken. Cos(x: real): real beräknar cosinus x där x är givet i radianer. Dipose(q: pointer) där pointer måste vara av typen pekare till någon sorts post är en dynamisk allokeringsprocedur som avallokerar en identifierad variabel q och förstör det identifierande värdet q. Dispose(q) ger ett felavbrott om q är nil eller odefinierad. Värdet q måste ha skapats med kortformen för new. Dipose(q: pointer k 1... k n : variant) där pointer måste vara av typen pekare till någon sorts post och variant måste vara väljare för existerande varianta definitioner av den posttyp som q får referera till är en dynamisk allokeringsprocedur som avallokerar en identifierad variabel q och förstör det identifierande värdet q. Dispose(q k 1... k n ) ger ett felavbrott om q är nil eller odefinierad. Värdet q måste ha skapats med kortformen för new och k 1... k n måste välja samma varianter som de som valdes då q skapades. Eof(f: file): boolean där f får vara vilken slags filtyp som helst returnerar true om f är öppnad i skrivmod eller om f är öppnad i läsmod och f positionerats efter sista posten i filen. Eof(f) genererar ett fel om f inte är definierad. I alla andra fall returnerar eof(f) false. Om parametern utelämnas antas input vara parameter. Eoln(f: text): boolean returnerar true om textfilen f är öppnad för läsning och f positionerats på ett tecken som i den aktuella teckenkoden används för radslutsmarkering. Eoln(f) genererar ett fel om f är odefinierad eller om eof(f) är true. I alla andra fall returnerar eoln(f) false. Om parametern utelämnas antas input vara parameter. Exp(x: real): real beräknar det aritmetiska värdet e x (där e är basen för den naturliga logaritmen). Get(f: file) där f får vara vilken slags filtyp som helst är en procedur som avancerar positionspekaren för f så att den pekar på nästa i den sekvens av poster som f utgör om det finns en sådan post och också låter f anta denna posts värde. Om det inte finns någon nästa post i f så kommer eof(f) att få värdet true och f att bli helt odefinierad. Get(f) genererar ett fel om f är odefinierad eller om eof(f) har värdet true. Om parametern utelämnas antas input vara parameter. Ln(x: real): real beräknar den naturlig logaritmen för parametervärdet x som måste vara större än 0 (noll). Ln(x) genererar ett fel om x < 0.

2 Några fakta om Standard Pascal New(p: pointer) där pointer måste vara av typen pekare till någon sorts post är en dynamisk allokeringsprocedur som allokerar utrymme för en identifierad variabel p med samma domäntyp som p och skapar ett nytt identifierande pekarvärde som tilldelas p. Om p är en variant post allokerar new(p) tillräckligt med utrymme för att kunna få plats med den mest utrymmeskrävande varianten. New(p: pointer c 1... c n : variant) där pointer måste vara av typen pekare till någon sorts post och variant måste vara väljare för existerande (nästlade) varianta definitioner av den posttyp som p får referera till är en dynamisk allokeringsprocedur som allokerar utrymme för en identifierad variabel p med samma domäntyp som p med etiketterna c 1... c n för n nästlade varianter och skapar ett nytt identifierande pekarvärde som tilldelas p. Odd(i: integer): boolean returnerar true om i är ett udda heltal och false annars. Ord(x: discrete): integer där x är vilken diskret typ som helst fördefinierad eller användardefinierad returnerar ordningstalet för x i den mängd av värden där x ingår. Pack(a: array i: integer p: packed array) där a är någon sorts array-typ definierad i programmet och p är motsvarande packed array-typ är en dataöverföringsprocedur som packar innehållet i a från och med komponent i och lägger resultatet i p. Page(f: text): boolean lägger in en (implementationsberoende) markering i textfilen f som gör att text som skrivs till f efter anropet till page(f) vid utskrift kommer att hamna högst upp på en ny sida i utskriften. Om parametern utelämnas antas den var output och om f är odefinierad genereras ett fel. Pred(x: discrete): discrete är en funktion som returnerar den symbol i den diskreta ordning som x tillhör som står före x i den aktuella uppräkningen. Om x är det första värdet i den aktuella typens uppräkning genereras ett fel. OBS! att Ord(Pred(x)) = Ord(x) - 1. Put(f: file) där f får vara vilken slags filtyp som helst är en procedur som lägger värdet f sist i filen f. Ett fel genereras om f inte är definierad eller om f inte är öppnad för skrivning eller om f inte är definierad. Efter anropet till Put(f) är f helt odefinierad. Read(f: file v: variable) där v måste vara ett namn som är deklarerat i programmet och av samma typ som elementen i f eller om f är av typen text av någon typ vars literaler automatisk kan konverteras till v:s typ. Read(f v) tilldelar v värdet av nästa komponent i f om v har samma typ som elementen i f eller värdet som nästa literal i filen konverteras till. Positionspekaren i f avanceras till nästa position eller till positionen efter nästa literal vilket som är tillämpligt. Om parametern f utelämnas antas att dess värde är input. Read(f: file v 1 v 2... v n ) fungerar som om det stod read(f v 1 ) read(f v 2... v n ). Readln(f: file v: variable) fungerar som read med det tillägget att readln fungerar endast för textfiler och att resten av aktuell inmatningsrad ignoreras och att nästa läsning sker från nästa rad.

Några fakta om Standard Pascal 3 Readln(f: file v 1 v 2... v n ) fungerar som om det stod read(f v 1 ) readln(f v 2... v n ). Reset(f: file) där f får vara vilken slags filtyp som helst är en procedur som öppnar f för läsning och som positionerar positionspekaren så att f antar värdet av den första posten i den sekvens av poster som f utgör och sätter värdet av eof(f) till false om filen f inte är tom. Om filen är tom sätts värdet av eof(f) till false och värdet av f blir helt odefinierat. Rewrite(f: file) där f får vara vilken slags filtyp som helst är en procedur som öppnar f för skrivning ersätter f med en tom sekvens samt sätter värdet av eof(f) till false. Round(r: real): integer beräknar trunc(r + 0.5) för r 0.0 och trunc(r - 0.5) för r < 0.0 om det existerar ett sådant värde i typen integer. Annars genereras ett fel. Sin(x: real): real beräknar sinus x där x är givet i radianer. Sqr(x: real): real eller Sqr(x: integer): integer beräknar x * x. Om det inte existerar ett sådant värde genereras ett fel. Sqrt(x: real): real beräknar x. Om det inte existerar ett sådant värde genereras ett fel. Succ(x: discrete): discrete är en funktion som returnerar den symbol i den diskreta ordning som x tillhör som står efter x i den aktuella uppräkningen. Om x är det sista värdet i den aktuella typens uppräkning genereras ett fel. OBS!: Ord(Succ(x)) = Ord(x) + 1. Trunc(r: real): integer returnerar det största heltal som är mindre än eller lika med parametern r om r 0.0 och det minsta heltalet som är större än eller lika med r om r < 0.0 om det finns ett sådant tal i mängden av heltal. Annars genereras ett fel. Unpack(p: packed array a: array i: integer) där a är någon sorts array-typ definierad i programmet och p är motsvarande packed array-typ. Unpack är en dataöverföringsprocedur som packar upp innehållet i p och lägger resultatet i a från och med komponent i. Write(f: file v: variable) där v måste vara ett namn som är deklarerat i programmet och av samma typ som elementen i f eller om f är av typen text av någon typ vars värden automatisk kan konverteras till literaler. Write(f v) skriver v:s värde sist i f om v har samma typ som elementen i f eller den literal som värdet konverteras till om f är av typen text. Om parametern f utelämnas antas att dess värde är output. Write(f: file v 1 v 2... v n ) fungerar som om det stod write(f v 1 ) write(f v 2... v n ). Writeln(f: file v: variable) fungerar som write med det tillägget att writeln fungerar endast för textfiler och att nästa skrivning sker på ny rad (en eoln-markering skrivs omedelbart efter variabelns värde). Writeln(f: file v 1 v 2... v n ) fungerar som om det stod write(f v 1 ) writeln(f v 2... v n ).

4 Några fakta om Standard Pascal Förenklad taxonomi över Pascals datatyper Datatyper Enkla typer Pekartyper Strukturerade typer Real Diskreta typer Array Set Record File Uppräknade typer Fördefinierade Intervall Text Boolean Integer Char

Några fakta om Standard Pascal 5 Sammanställning över operatorer Aritmetiska operatorer operator operation operandtyp resultattyp + (unärt) identitet integer integer + (unärt) identitet real real (unärt) negering integer integer (unärt) negering real real + addition integer integer + addition real real subtraktion integer integer subtraktion real real multiplikation integer integer multiplikation real real div division integer integer / division real real mod modulus integer integer Relationsoperatorer operator operation operandtyp resultattyp = likhet enkel boolean = likhet sträng boolean = likhet set boolean = likhet pekare boolean < mindre än enkel boolean < mindre än sträng boolean > större än enkel boolean > större än sträng boolean <= mindre än eller lika med enkel boolean <= mindre än eller lika med sträng boolean <= inklusion mängd boolean >= större än eller lika med enkel boolean >= större än eller lika med sträng boolean >= inklusion mängd boolean in mängdtillhörighet element mängd boolean Booleska operatorer operator operation operandtyp resultattyp not negation boolean boolean or disjunktion boolean boolean and konjunktion boolean boolean

6 Några fakta om Standard Pascal Mängdoperatorer operator operation operandtyp resultattyp + union mängdtyp T T differens mängdtyp T T snitt mängdtyp T T Andra operatorer Tilldelning notation operation operandtyp resultattyp := tilldelning någon typ T ingen Variabelaccess notation operation operandtyp resultattyp [ ] arrayindexering array komponenttyp. fältaccess record fälttyp identifikation pointer post buffertaccess filtyp komponenttyp Konstruktorer notation operation operandtyp resultattyp [ ] mängdkonstruktion bastyp mängd strängkonstruktion teckentyp sträng

Några fakta om Standard Pascal 7 Standardidentifierare (som inte är reserverade ord) Konstanter false true maxint nil Typer boolean char integer real text Variabler input output Funktioner abs arctan chr cos eof eoln exp ln odd ord pred round sin sqr sqrt succ trunc Procedurer dispose get new pack page put read readln reset rewrite unpack write writeln Alfabetisk lista abs false pack sin arctan get page sqr boolean input pred sqrt char integer put succ chr ln read text cos maxint readln true dispose new real trunc eof odd reset unpack eoln ord rewrite write exp output round writeln Fördefinierade symboler Specialtecken + / = < > <= >= <>. : :=.. ( ) [ ]

8 Några fakta om Standard Pascal Reserverade ord and end nil set array file not then begin for of to case function or type const goto packed until div if procedure var do in program while downto label record with else mod repeat Alternativ representation (. för [.) för ] @ eller ^ för Direktiv forward

Några fakta om Standard Pascal 9 Syntax Pascals syntax bestäms av hur man kan vandra genom de här presenterade diagrammen i pilarnas riktning. De här korrigerar dessutom de som finns i kursboken. Symboler i fet stil inom cirklar och ovaler skall skrivas exakt som de står skrivna. Dessa symboler kallas terminaler. Det som står i kursiv stil inom rektanglar beskrivs i andra syntaxdiagram. Observera att syntaxbeskrivningen endast klargör hur satser i språket kan formas. Syntaxen måste kompletteras med en semantisk beskrivning som klargör vilka av de syntaktiskt korrekta konstruktionerna som har en betydelse i språket. En sådan beskrivning ligger utanför ramen för den här sammanställningen och inhämtas lämpligen genom studium av en bok om programmering i Pascal t ex Dahl Lindqvist: Pascal helt enkelt ISBN 91-44-47361-3. I just den boken finns fel i syntaxbeskrivningarna och de nedan givna korrigerar de i boken och (i viss mån) kompletterar dem. Vissa symboler kompletteras med klargöranden inom parentes endast för det som står utanför parentesen finns syntaxdiagram det som står inom parentesen är att betrakta som ett semantiskt förtydligande. program program identifierare ( (fil-) identifierare ) block. block deklarationsdel sammansatt sats

10 Några fakta om Standard Pascal deklarationsdel label lägesdeklaration const konstantdefinition type typdefinition var variabeldeklaration procedurdeklaration funktionsdeklaration lägesdeklaration lägesetikett lägesetikett teckenlöst heltal konstantdefinition identifierare = konstant typdefinition identifierare = typ

Några fakta om Standard Pascal 11 variabeldeklaration identifierare : typ procedurdeklaration procedurhuvud block direktiv funktionsdeklaration funktionshuvud block direktiv procedurhuvud procedure identifierare ( formell parameter ) funktionshuvud function identifierare ( formell parameter ) : (typ-)identifierare

12 Några fakta om Standard Pascal formell parameter var identifierare : (typ-)identifierare procedurhuvud funktionshuvud sträng vilket skrivbart tecken som helst utom identifierare direktiv bokstav bokstav siffra teckenlöst heltal siffra

Några fakta om Standard Pascal 13 konstant teckenlös konstant + teckenlöst heltal teckenlöst reellt tal (konstant-)identifierare teckenlös konstant teckenlöst heltal teckenlöst reellt tal (konstant-)identifierare sträng nil teckenlöst reellt tal teckenlöst heltal. teckenlöst heltal E teckenlöst heltal +

14 Några fakta om Standard Pascal typ (typ-)identifierare uppräknad typ intervalltyp pekartyp arraytyp packed posttyp filtyp mängdtyp uppräknad typ ( (konstant-)identifierare ) intervalltyp konstant.. konstant pekartyp (typ-)identifierare

Några fakta om Standard Pascal 15 arraytyp array [ typ ] of typ posttyp record fältlista end fältlista identifierare : typ variant del variant del case identifierare : (typ-) identifierare of variant variant konstant : ( fältlista )

16 Några fakta om Standard Pascal filtyp file of typ mängdtyp set of (uppräknad eller intervall-)typ sammansatt sats begin sats end sats lägesetikett : tilldelningssats procedursats sammansatt sats IF-sats CASE-sats WHILE-sats FOR-sats REPEAT-sats WITH-sats hoppsats

Några fakta om Standard Pascal 17 tilldelningssats variabel := uttryck (funktions-) identifierare procedursats (procedur-) identifierare ( aktuell parameter ) IF-sats if (villkors-) uttryck then sats else sats CASE-sats case uttryck of konstant : sats end

18 Några fakta om Standard Pascal WHILE-sats while (villkors-) uttryck do sats FOR-sats for (variabel-) identifierare := uttryck to downto uttryck do sats REPEAT-sats repeat sats until (villkors-) uttryck WITH-sats with (post-) variabel do sats hoppsats goto lägesetikett

Några fakta om Standard Pascal 19 aktuell parameter uttryck variabel (funktions-)identifierare (procedur-)identifierare uttryck enkelt uttryck < <= = <> >= > in enkelt uttryck enkelt uttryck term + + or term term faktor * / div mod and faktor

20 Några fakta om Standard Pascal faktor teckenlös konstant variabel funktionsdesignator ( uttryck ) not faktor mängdvärde funktionsdesignator (funktions-) identifierare ( aktuell parameter ) mängdvärde [ ] uttryck.. uttryck

Några fakta om Standard Pascal 21 variabel (variabel-) identifierare [ uttryck ] (fält-) identifierare. (fält-)identifierare bokstav A B... Z a b... z siffra 0 1 2 3 4 5 6 7 8 9

22 Några fakta om Standard Pascal Några rättelser till Pascal-boken Rapportera till Serafim via e-post om ni hittar mera!! sida rad/stycke står skall stå 1. 60 rad 1 I exempel 10 I ex 3 2. 80 rad 2 & 6 currentsegment segm 3. 120 i rutan i retrieve retrieve(alist el) retrieve(alist) 4. 129 mittenstycket rad 2 NextItem next 5. 134 mittenstycket rad 3 readchartypelist readtypelist 6. 137 I procedure readword VAR ch:char Ingenting (används inte) 7. 138 I proc skipblanks VAR ch:char Ingenting (används inte) 8. 145 sista stycket rad 4 konsektivt konsekutivt 9. 196 I function fib inner:=fibn inner:=fibn1 10. 219 I Ex1 rad 3 permits = (DC10 permit = (DC10 OBServera att många syntaxdiagram är felaktiga. Använd de som finns i detta häfte.