Download presentation
Presentation is loading. Please wait.
Published byRoy Anthony Modified over 9 years ago
1
1 February 17, 2016 1 February 17, 2016February 17, 2016February 17, 2016 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS400 Compiler Construction
2
2 Static Checking and Type Systems COP5621 Compiler Construction Copyright Robert van Engelen, Florida State University, 2007 February 17, 2016 2 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction Semantic Analysis
3
3 The Structure of our Compiler Revisited February 17, 2016 3 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
4
4 February 17, 2016 4 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction Keep in mind following questions Semantic Checking –S–Static –D–Dynamic –O–One/multi pass checking Type expressions –G–Graph representations –N–Name equivalence –S–Structural equivalence Constructing graphs by Yacc –C–Construct type nodes –S–SDD – attributed type production –Y–Yacc: auto tool for constructing
5
5 Static versus Dynamic Checking Static checking: the compiler enforces programming language’s static semantics –Program properties that can be checked at compile time Dynamic semantics: checked at run time –Compiler generates verification code to enforce programming language’s dynamic semantics February 17, 2016 5 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
6
6 Static Checking Typical examples of static checking are –Type checks –Flow-of-control checks –Uniqueness checks –Name-related checks February 17, 2016 6 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
7
7 Type Checks, Overloading, Coercion, and Polymorphism int op(int), op(float); int f(float); int a, c[10], d; d = c+d;// FAIL --> access c as an address *d = a;// FAIL --> d is not pointer a = op(d);// OK: overloading (C++) a = f(d);// OK: coersion of d to float vector v;// OK: template instantiation February 17, 2016 7 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction Type conversion is explicit, for example using type casts Type coercion is implicitly performed by the compiler
8
8 Flow-of-Control Checks myfunc() { … break; // ERROR } myfunc() { … switch (a) { case 0: … break; // OK case 1: … } myfunc() { … while (n) { … if (i>10) break; // OK } February 17, 2016 8 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
9
9 Uniqueness Checks myfunc() { int i, j, i; // ERROR … } struct myrec { int name; }; struct myrec // ERROR { int id; }; February 17, 2016 9 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction cnufym(int a, int a) // ERROR { … }
10
10 Name-Related Checks LoopA: for (int I = 0; I < n; I++) { … if (a[I] == 0) break LoopB; // Java labeled loop … } February 17, 2016 10 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
11
11 One-Pass versus Multi-Pass Static Checking One-pass compiler: static checking for C, Pascal, Fortran, and many other languages is performed in one pass while intermediate code is generated –Influences design of a language: placement constraints Multi-pass compiler: static checking for Ada, Java, and C# is performed in a separate phase, sometimes by traversing the syntax tree multiple times February 17, 2016 11 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
12
12 Type Expressions Type expressions are used in declarations and type casts to define or refer to a type –Primitive types, such as int and bool –Type constructors, such as pointer-to, array-of, records and classes, templates, and functions –Type names, such as typedefs in C and named types in Pascal, refer to type expressions February 17, 2016 12 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
13
13 Graph Representations for Type Expressions int *f(char*,char*) fun argspointer char intpointer char pointer Tree forms fun argspointer char intpointer DAGs February 17, 2016 13 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
14
14 Cyclic Graph Representations struct Node { int val; struct Node *next; }; struct val pointer int Cyclic graph next February 17, 2016 14 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
15
15 Name Equivalence Each type name is a distinct type, even when the type expressions the names refer to are the same Types are identical only if names match Used by Pascal (inconsistently) type link = ^node; var next : link; last : link; p : ^node; q, r : ^node; With name equivalence in Pascal: p ≠ next p ≠ last p = q = r next = last February 17, 2016 15 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
16
16 Structural Equivalence of Type Expressions Two types are the same if they are structurally identical Used in C, Java, C# = February 17, 2016 16 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
17
17 Structural Equivalence of Type Expressions (cont’d) Two structurally equivalent type expressions have the same pointer address when constructing graphs by sharing nodes struct Node { int val; struct Node *next; }; struct Node s, *p; … p = &s; // OK … *p = s; // OK February 17, 2016 17 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
18
18 Constructing Type Graphs in Yacc Type *mkint() construct int node if not already constructed Type *mkarr(Type*,int) construct array-of-type node if not already constructed Type *mkptr(Type*) construct pointer-of-type node if not already constructed February 17, 2016 18 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
19
19 Syntax-Directed Definitions for Constructing Type Graphs in Yacc %union { Symbol *sym; int num; Type *typ; } %token INT %token ID %token NUM %type type % decl : type ID { addtype($2, $1); } | type ID ‘[’ NUM ‘]’ { addtype($2, mkarr($1, $4)); } ; type : INT { $$ = mkint(); } | type ‘*’ { $$ = mkptr($1); } | /* empty */ { $$ = mkint(); } ; February 17, 2016 19 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
20
20 February 17, 2016 20 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction Got it with following questions Semantic Checking –S–Static –D–Dynamic –O–One/multi pass checking Type expressions –G–Graph representations –N–Name equivalence –S–Structural equivalence Constructing graphs by Yacc –C–Construct type nodes –S–SDD – attributed type production –Y–Yacc: auto tool for constructing
21
21 Thank you very much! Questions? February 17, 2016 21 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.