1 / 60

CMPE 104

CMPE 104. Pascal (Modified slides of Tom Rethard). Pascal. Designed by Niklaus Wirth Development started in 1968 First working compiler in 1970 Pascal-70 Report was on 29 pages. Pascal Goals. Goals It is teaching language Reliability Simplicity Efficiency Wirth:

Download Presentation

CMPE 104

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CMPE 104 Pascal(Modified slides of Tom Rethard)

  2. Pascal • Designed by Niklaus Wirth • Development started in 1968 • First working compiler in 1970 • Pascal-70 Report was on 29 pages

  3. Pascal Goals • Goals • It is teaching language • Reliability • Simplicity • Efficiency • Wirth: “the principle to include features that were well understood, in particular by implementers, and to leave out those that were still untried and unimplemented, proved to be the most successful single guideline.” • The language is suitable for teaching programming in a systematic way. • The implementation of the language is reliable and efficient, at compile-time and run-time, on all available computers.

  4. Example Program AbsMean (input, output);const Max = 900;type index = 1 .. Max;var N: 0 .. Max; Data: array [index] of real; sum, avg, val: real; i: index;…

  5. Example (con’t) beginsum := 0;readln (N);for i := 1 to N do begin readln (val); if val < 0 then Data[i] := val else Data[i] := val end;for i := 1 to N do sum = sum + Data[i];avg := sum/N;writeln (avg); end.

  6. Enumerations Type DayOfWeek = (Sun, Mon, Tue, Wed, Thu, Fri, Sat); Month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);var today, tomorrow: DayOfWeek;begin…today := Tue;tomorrow := today + 1;…today = Jan; /* type error …

  7. Operations • := • succ • pred • = • <> • < • > • <= • >=

  8. Subrange Types var DayOfMonth 1 .. 31; • Restricts the range of values for DayOfMonth to the integer subrange of 1..31 • Can also use in enumerations: Type WeekDay = Mon .. Fri;

  9. Sets • Set of <ordinal type> (enumeration type(char,Boolean), subrange type) • Var S, T: set of 1..10; • S := [1, 2, 3, 5, 7]; • T := [1 ..6]; • If T = [1, 2, 3, 5] then …

  10. Set Operations • = • <> • <= subset or equal • >= • But: no < or > !

  11. Arrays • Any upper or lower bound • Can also use enumeration types as array indices • Examples var A: array [1 .. 100] of real; var HoursWorked: array [Mon .. Fri] of 0 .. 24;

  12. Arrays Var day: Mon .. Fri; TotalHours: 0..120;begin TotalHours := 0; for day := Mon to Fri do TotalHours := TotalHours + HoursWorked[day];

  13. Arrays of Characters Any finite discrete type for index var Occur: array [char] of integer; …Occur[ch] := Occur[ch] + 1; …if Occur[‘e’] > Occur[‘t’] then …

  14. More Complex Arrays var M: array [1..20] of array [1 .. 100] of real;orvar m: array [1 .. 20, 1 .. 100] of real;

  15. More on Arrays • Need to be static, not dynamic • Must know types at compile time • Dimensions are part of the array type • Arrays are considered the same type if index types and base types both match

  16. Type problems type vector = array [1 .. 100] of real;var U, V, vector;function sum (x: vector): real; …begin … end {sum}; • Can write var W: array [1 ..75] of real; • But cannot write: Sum(W)

  17. Type Problems • Types of W and of x are not the same because the ranges of the indices are different!

  18. Record Types • Heterogeneous data • Multiple components • Various types

  19. Records type person = record name: string; age: 16 .. 100; salary: 10000 .. 100000; sex: (male, female); birthdate: date; hiredate: date;end;string = packed array [1 ..30] of char;date = record mon: month; day: 1 ..31; year: 1900 .. 2100;end;month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);

  20. Using a Record • To use a record:var newhire: person;just like any other type

  21. Getting to the Components varnewhire: person;today: date;…newhire.age := 25;newhire.sex := female;newhire.date := today;

  22. More Possibilities if newhire.name[1] = ‘A’ then … type employeeNum = 1000 .. 9999;var employees: array [employeeNum] of person; EN: employeeNum;

  23. Making it Simpler with newhirebegin age := 25; sex := female; date := todayend;

  24. Storage Groupings • Homogeneous • Arrays • All elements are the same type • Computed (dynamic) selector (subscript or index) • Heterogeneous • Records • Elements (components) may be of different types • Static selector

  25. Variant Records • Sometimes records vary from one record type to another. • Think of this as a primitive form of subclassing

  26. Variant Records type plane = record flight: 0 .. 999; kind: (B727, B737, B747); status (inAir, onGround, atTerminal); altitude: 0 .. 100000; heading: 0 .. 359; arrival: time; destination: airport; location: airport; runway: runwayNumber; parked: airport; gate: 1.. 100; departure: time;end; {plane}

  27. What’s Wrong? • Not all data has meaning at the same time. • Can imply a plane is located at one airport and is parked at another • Violates security principle.

  28. Variant Records type plane = record flight: 0 .. 999; kind: (B727, B737, B747); case status: (inAir, onGround, atTerminal); inAir:( altitude: 0 .. 100000; heading: 0 .. 359; arrival: time; destination: airport); onGround: ( location: airport; runway: runwayNumber); atTerminal: ( parked: airport; gate: 1.. 100; departure: time);end; {plane}

  29. Implementation flightkindstatus altitudeheadingarrivaldestination locationrunway parkedgatedeparture

  30. The Dreaded Pointer • There is a problem with pointers and strong typing! • Pascal solves this problem by typing pointers

  31. Typed Pointers var p: ^real; x: real; c: char;begin new(p); p^ := 3.14159; c := p^; {illegal}end

  32. Pointers with Records var p: ^plane;begin … p^.plane.parked[1] … …end;

  33. Interpretations for equivalency • Structural equivalence • Structural descriptions of the types be the same • Name equivalence • Names must be same

  34. Structural Equivalence var x: record id: integer; weight: real end; y: record id: integer; weight: real end; • The above are the same because their structure is the same

  35. But… Consider this typeperson = record id: integer; weight: real end;car = record id: integer; weight: real end; • The above are the same because their structure is the same, so:car := person;according to structural equivalency is legal!

  36. Name Equivalence varx: record id: integer; weight: real end;y: record id: integer; weight: real end; • Is actually ambiguous, • Different versions of Name Equivalence Rule differ on this example. • If reinterpreted as follows, then they are different type T00029: record id: integer; weight: real end; T00030: record id: integer; weight: real end; varx: T00029;y: T00030;

  37. Name Equivalence Issues type age = 0 .. 150; var n: integer;a: age; • Is n:= a legal? • Pure name equivalence says no • Logic says yes • Revised Pascal Report says that a subrange of a type is still that type

  38. Comparison • Name Equivalence generally safer • More restrictive • Name Equivalence is easier to implement • Simply a string comparison • Structural equivalence requires a recursive function • ISO Pascal specifies name Equivalence

  39. Name Structures • Pascal provides six types • Constant bindings • Type bindings • Variable bindings • Procedure and function bindings • Implicit enumeration bindings • Label bindings

  40. Constant bindings • const MaxData = 100; • MaxData can be used almost anywhere • All declarations • Executable statements (for loops, etc.) • Expressions • BUT, not in other const declarations! • const MaxDataMinus1 = MaxData –1; is not allowed

  41. Constructors • Record constructors • Procedure/Function • The major scope defining construct

  42. Procedures procedure <name> (<formal arguments>); <declarations>begin <statements>end;

  43. A Problem procedure P (...); ...begin ... Q(...) ...end; procedure Q (...); ...begin ... P(...) ...end;

  44. A Problem Solved procedure Q(...) forward; procedure P (...); ...begin ... Q(...) ...end; procedure Q (...); ...begin ... P(...) ...end;

  45. Procedure Construction procedure <name> (<formal arguments>); <label declarations> <const declarations> <type declarations> <var declarations> <procedure and function declarations>begin <statements>end;

  46. Pascal eliminates the block • Simplifies name structure • Complicates efficient use of memory

  47. Control structures • Reflects structured programming ideas

  48. For Loop for <name> := expression { to | downto } <expression> do <statement> Bounds of the loop are computed once, at loop entry => definite iterator

  49. While Loop • Also a “Leading Decision Indefinite Iterator” while <condition> do <statement> • Checks at top of loop • Can use “while true do....” for a loop exiting from the middle (Mid-Decision Iterator)

  50. Repeat Loop • Also “Trailing Decision Indefinite Iterator” repeat <statement> until <condition> • Checks at bottom of loop

More Related