Chapter 2.3 Modula 2 An Introduction
Summary First example Terminal symbols Comments Data –Constants –Variables Actions –Assignment statement –Control statements
A first example MODULE FirstExample; (* This program computes the area of a circle *) FROM InOut IMPORT WriteString, WriteLn; FROM RealInOut IMPORT WriteReal, ReadReal; CONST pi = ; VAR radius, area : REAL; BEGIN WriteLn; WriteLn; WriteString("Hello, I compute the area of a circle for you"); WriteLn; WriteString("Give me the radius in meters "); ReadReal(radius); area := pi * radius * radius; WriteString("The area of this circle is "); WriteReal(area,0); WriteString(" square meters "); WriteLn; END FirstExample.
Terminal Symbols Upper- and Lower-case letters a b c d e... A B C D E... Digits Special signs ;,. | + - * / = # > < ( ) [ ] { } Composed signs (* *) := >= <= Reserved Words MODULE BEGIN END IMPORT FROM
Source BSource CSource DSource A Reloc. DReloc. AReloc. BReloc. C Compiler XCompiler YAssembler LINKER Object Code A+B+C+D Role of a Linker FROM InOut IMPORT WriteString, WriteLn; FROM RealInOut IMPORT WriteReal, ReadReal;
Comments (* This program computes the area of a circle *) (* Text not containing (* nor *) *) Comment
Summary First example Terminal symbols Comments Data –Constants –Variables Actions –Assignment statement –Control statements
Constants Data whose value can not change during program execution Literal Constants Only a value: Named Constants A name and a value: The value can be a constant expression "The area of this circle is " pi = twopi = pi * 2.0
Syntax of Constants = Constant ExpressionIdentifier Constant Declaration Whole Number Literal Literal Real Literal String Literal Pointer Literal
Whole Number Literal + - Decimal Literal Octal Literal Hexadecimal Literal
Decimal Literal DecimalDigit
Octal Literal OctalDigit B 10B 8B
Hexadecimal Literal HexadecimalDigit H ABCDE F DecimalDigit HexadecimalDigit 10FFFH 0FFFFFH 1000F FFFFFH
Real Literal E E E-4 3,1416
String Literal "The area of this circle is " 'The area of this circle is ' "This string contains a ' "'but no " ' " Text not containing " " ' Text not containing ' '
Why named constants ? Area := 6 * Length*Length... Tax := (Price * 6) DIV 100 CONST VAT = 6;... Area := 6 * Length*Length... Tax := (Price * VAT) DIV 100 Area := 21 * Length*Length... Tax := (Price * 21) DIV 100 CONST VAT = 21;... Area := 6 * Length*Length... Tax := (Price * VAT) DIV 100
Constants and Variables Constants –(Name) –Value The value of a constant belongs to a type. Variables –Name –Type Type = set of all values the variable can have The type determines the internal representation of data as well as the operations that can be performed on the data
Types in Modula 2 Simple Types: values can’t be decomposed –Ordinal Types: bijection with natural numbers –Reals: approx. representation for real values –Pointers: addresses in data memory Structured Types: Values have # components –Arrays: all components have same type –Records: components can have # types –Sets: small sets of ordinal values –Procedures: entire subprograms
Summary First example Terminal symbols Comments Data –Constants –Variables Actions –Assignment statement –Control statements
Assignments Assignment operator := –Fundamentally different from the = sign –The = sign denotes a timeless relation –The := operator describes a particular action: The right side expression is evaluated Its value is stored in the left side variable –Illustrative example : a := a + 1 area := pi * radius * radius;
Control Statements Influence the order of execution of instructions Selection –IF THEN ELSE –CASE Iteration –WHILE –REPEAT –FOR –LOOP Procedure Call WriteString("Hello, I comput WriteLn; WriteString("Give me the rad ReadReal(radius); area := pi * radius * radius WriteString("The area of thi WriteReal(area,0); WriteString(" square meters WriteLn;