Programming%20Languages%202nd%20edition%20Tucker%20and%20Noonan - PowerPoint PPT Presentation

About This Presentation
Title:

Programming%20Languages%202nd%20edition%20Tucker%20and%20Noonan

Description:

All declared variables must have unique names. public static void V (Declarations d) ... Declaration dj = d.get(j); check( ! (di.v.equals(dj.v)), 'duplicate ... – PowerPoint PPT presentation

Number of Views:91
Avg rating:3.0/5.0
Slides: 23
Provided by: syst284
Learn more at: http://www.cs.uah.edu
Category:

less

Transcript and Presenter's Notes

Title: Programming%20Languages%202nd%20edition%20Tucker%20and%20Noonan


1
Programming Languages2nd editionTucker and
Noonan
  • Chapter 6
  • Types
  • I was eventually persuaded of the need to design
    programming notations so as to maximize the
    number of errors which cannot be made, or if
    made, can be reliably detected at compile time.
  • C.A.R. Hoare

2
Type Systems Review
  • Type Checking the detection of type errors,
    either at compile time or at run time.
  • Type error attempt to perform an operation on a
    value from a data type for which it is not
    defined
  • Type System a precise definition of the bindings
    between a variables type, its values, and the
    possible operations on the values
  • Describes how new types are defined and how to
    tell when a type is used correctly
  • Recall that a language is strongly typed if its
    type system makes it possible to detect type
    errors either at compile time or run time.
  • Type safety is similar to strong typing use of a
    type system prevents undetected type errors.

3
Implementing a Type System
  • Cannot be defined in BNF or EBNF notation
  • Cannot represent context-sensitive constraints,
    e.g. uniqueness of an identifier within a given
    scope
  • Other possible approaches
  • Write boolean functions to define each type rule
  • Express the rules in English and give an
    algorithm to implement the rules

4
Type System for Clite
  • A set of validity functions define the various
    rules, such as variables have unique names.
  • Each function returns a boolean value to tell
    whether a part of the programs abstract syntax
    tree is type valid.
  • The Clite type checking system uses a type map a
    function that binds a variable name to its type.

5
6.1 Type System for CLite
  • Single function main
  • Single scope no nesting, no globals
  • Name resolution errors detected at compile time
  • Static bindings of identifier/type/variable
  • Type rules refer to abstract syntax on p. 53

6
Clite Type Rules, pp. 138-43
  • All referenced variables must be declared
  • All declared variables must have unique names
  • A Program is type valid if its Declarations
    decpart is valid and its Block body is valid with
    respect to the type map for those particular
    Declarations
  • A Statement is valid with respect to the
    programs type map if it satisfies the following
    constraints (specific validity conditions for
    each statement type)
  • The validity of an Expression is defined using
    the programs type map and each of the
    Expressions subclasses (validity conditions
    for the various types of Expressions Value,
    Variable, Binary, or Unary
  • Every Expressions result type is determined as
    follows (includes rules for implicit type
    conversions)

7
Example Clite Program (Fig 6.1)
// compute factorial of integer n void main ( )
int n, i, result n 8 i 1 result
1 while (i lt n) i i 1 result
result i
8
Type Maps
  • A Type map is a set of ordered pairs
  • e.g., ltn,intgt, lti,intgt, ltresult, intgt
  • Can implement as a hash table where the
    identifier is the key the type is the value.
  • The method typing (p. 137) creates a type map
    based on a programs declarations
  • Given a typemap map and a variable vr, method
    typeOf retrieves the type of a variable vartype
    typeOf(vr,map)

9

The typing function creates a type map
  • public static TypeMap typing
    (Declarations d)
  • TypeMap map new TypeMap( )
  • for (Declaration di d)
  • map.put (di.v, di.t)
  • return map
  • based on abstract syntax for Clite Declaration
  • Declaration VariableDecl ArrayDecl
  • VariableDecl Variable v Type t
  • ArrayDecl Variable v Type t Integer size

10
Clite Type Rules
  • Type rule 6.1 All referenced variables must be
    declared.
  • Check the type map for each variable reference
  • Type rule 6.2 all declared variables must have
    unique names
  • See function on next page

11
Implementing Type Rule 6.2
  • All declared variables must have unique names.
  • public static void V (Declarations d)
  • for (int i0 iltd.size() - 1 i)
  • for (int ji1 jltd.size() j)
  • Declaration di d.get(i)
  • Declaration dj d.get(j)
  • check( ! (di.v.equals(dj.v)),
  • "duplicate declaration "
    dj.v)

12
Clite Type Rules
  • Type rule 6.3 A program is valid if
  • its Declarations are valid and
  • its Block body is valid with respect to the type
    map for those Declarations
  • public static void V (Program p)
  • V (p.decpart)
  • V (p.body, typing (p.decpart))

13
Clite type rules
  • Type rule 6.4 a statement is valid if
  • A Skip is always valid
  • An Assignment is valid if
  • Its target Variable is declared
  • Its source Expression is valid
  • If the target Variable is float, then the type of
    the source Expression must be either float or int
  • Otherwise if the target Variable is int, then the
    type of the source Expression must be either int
    or char
  • Otherwise the target Variable must have the same
    type as the source Expression.

14
  • Type Rule 6.4 (continued)
  • A Conditional is valid if
  • Its test Expression is valid and has type bool
  • Its thenbranch and elsebranch Statements are
    valid
  • A Loop is valid if
  • Its test Expression is valid and has type bool
  • Its Statement body is valid
  • A Block is valid if all its Statements are valid.

15
Rule 6.4 Example
  • // compute the factorial of integer n
  • void main ( )
  • int n, i, result
  • n 8
  • i 1
  • result 1
  • while (i lt n)
  • i i 1
  • result result i

This assignment is valid if n is declared,
8 is valid, and the type of 8 is int or char
(since n is int).
16
Rule 6.4 Example
  • // compute the factorial of integer n
  • void main ( )
  • int n, i, result
  • n 8
  • i 1
  • result 1
  • while (i lt n)
  • i i 1
  • result result i

This loop is valid if i lt n is valid, i lt n
has type bool, and the loop body is valid
17
  • Type Rule 6.5 Validity of an Expression
  • A Value is always valid.
  • A Variable is valid if it appears in the type
    map.
  • A Binary is valid if
  • Its Expressions term1 and term2 are valid
  • If its Operator op is arithmetic, then both
    Expressions must be either int or float
  • If op is relational, then both Expressions must
    have the same type
  • If op is or , then both Expressions must be
    bool
  • A Unary is valid if
  • Its Expression term is valid,

18
  • Type Rule 6.6 The result type of an Expression e
    is determined as follows
  • If e is a Value, then the result type is the type
    of that Value.
  • If e is a Variable, then the result type is the
    type of that Variable.
  • If e is a Binary op term1 term2, then
  • If op is arithmetic, then the (common) type of
    term1 or term2
  • If op is relational, or , then bool
  • If e is a Unary op term, then
  • If op is ! then bool

19
Rule 6.5 and 6.6 Example
  • // compute the factorial of integer n
  • void main ( )
  • int n, i, result
  • n 8
  • i 1
  • result 1
  • while (i lt n)
  • i i 1
  • result result i

This Expression is valid since op is
arithmetic () and the types of i and result
are int. Its result type is int since the
type of i and result is int.
20
6.3 Formalizing the Clite Type System
  • Example of a formal statement of the Clite type
    rules
  • In 6.1, less formal presentation an example of
    Java functions that can be used to perform type
    checking

21
6.3 Formalizing the Clite Type System
Type map Created by (Type Rule
6.1) Validity of Declarations (Type Rule 6.2)
22
Validity of a Clite Program
(Type Rule 6.3)
Write a Comment
User Comments (0)
About PowerShow.com