Semantic Analysis: Type...
Transcript of Semantic Analysis: Type...
![Page 1: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/1.jpg)
Semantic Analysis:Type Checking
April 22, 2013
Monday, April 22, 13
![Page 2: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/2.jpg)
Where We Are
Lexical Analysis
Semantic Analysis
Syntax Analysis
IR Generation
IR Optimization
Code Generation
Optimization
SourceCode
Machine
Code
Monday, April 22, 13
![Page 3: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/3.jpg)
Last Time...
Goals&of&a&Seman,c&Analyzer&• Compiler&must&do&more&than&recognize&whether&a&sentence&
belongs&to&the&language…&
• •&Find&all&possible&remaining&errors&that&would&make&program&invalid&
• undefined&variables,&types&• type&errors&that&can&be&caught&sta,cally&
• Terminology&• Sta,c&checks&–&done&by&the&compiler&• Dynamic&checks&–&done&at&run&,me&
Monday, April 22, 13
![Page 4: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/4.jpg)
Why$Separate$Seman-c$Analysis?$• Parsing$cannot$catch$some$errors$• Why?$
• Some$language$constructs$are$not$context9free$– Example:$All$used$variables$must$have$been$declared$(scoping)$
– Example:$A$method$must$be$invoked$with$arguments$of$proper$type$(typing)$
Monday, April 22, 13
![Page 5: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/5.jpg)
What%Does%Seman-c%Analysis%Do?%• Checks%of%many%kinds:%
1. All%iden-fiers%are%declared%2. Types%%3. Inheritance%rela-onships%4. Classes%defined%only%once%5. Methods%in%a%class%defined%only%once%6. Reserved%iden-fiers%are%not%misused%And%others%.%.%.%
• The%requirements%depend%on%the%language%
Monday, April 22, 13
![Page 6: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/6.jpg)
Typical(Seman-c(Errors(• Mul-ple(declara-ons:(a(variable(should(be(declared((in(the(
same(scope)(at(most(once((• Undeclared(variable:(a(variable(should(not(be(used(before(
being(declared(• Type(mismatch:(type(of(the(le@Ahand(side(of(an(assignment(
should(match(the(type(of(the(rightAhand(side(• Wrong(arguments:(methods(should(be(called(with(the(right(
number(and(types(of(arguments(
Monday, April 22, 13
![Page 7: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/7.jpg)
A"Sample"Seman*c"Analyzer"• Works"in"two"phases""– traverses"the"AST"created"by"the"parser"
"1. For"each"scope"in"the"program"– process'the'declara-ons"
• add"new"entries"to"the"symbol"table"and""• report"any"variables"that"are"mul*ply"declared"
– process'the'statements'''• find"uses"of"undeclared"variables,"and""• update"the""ID""nodes"of"the"AST"to"point"to"the"
appropriate"symbolFtable"entry.""2. Process"all"of"the"statements"in"the"program"again"– use"the"symbolFtable"informa*on"to"determine"the"
type"of"each"expression,"and"to"find"type"errors.""
Monday, April 22, 13
![Page 8: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/8.jpg)
Scoping:)General)Rules)• The)scope)rules)of)a)language:)
– Determine)which)declara:on)of)a)named)object)corresponds)to)each)use)of)the)object)
– Scoping)rules)map)uses)of)objects)to)their)declara:ons)
• C++)and)Java)use)sta$c&scoping:)– Mapping)from)uses)to)declara:ons)at)compile):me)– C++)uses)the)"most)closely)nested")rule)
• a)use)of)variable)x)matches)the)declara:on)in)the)most)closely)enclosing)scope))
• such)that)the)declara:on)precedes)the)use)
Monday, April 22, 13
![Page 9: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/9.jpg)
Dynamic(Scoping(Revisited(A(use(of(a(variable(that(has(no(corresponding(declara:on(in(the(same(func:on(corresponds(to(the(declara:on(in(the(most%recently%called.s/ll.ac/ve(func:on(
• int(i(=(1;(• void(func()({(• (((cout(<<(i(<<(endl;(• }(• int(main(()({(• (((int(i(=(2;(• (((func();(• (((return(0;(• }(
Monday, April 22, 13
![Page 10: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/10.jpg)
Dynamic(Scoping(Revisited(A(use(of(a(variable(that(has(no(corresponding(declara:on(in(the(same(func:on(corresponds(to(the(declara:on(in(the(most%recently%called.s/ll.ac/ve(func:on(
• int(i(=(1;(• void(func()({(• (((cout(<<(i(<<(endl;(• }(• int(main(()({(• (((int(i(=(2;(• (((func();(• (((return(0;(• }(
If C++ used dynamic scoping,
this would print out 2, not 1
Monday, April 22, 13
![Page 11: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/11.jpg)
Dynamic(Scoping(Revisited(• Each(func8on(has(an(environment(of(defini8ons(• If(a(name(that(occurs(in(a(func8on(is(not(found(in(its(environment,(its(caller�s(environment(is(searched(
• And(if(not(found(there,(the(search(con8nues(back(through(the(chain(of(callers((
• Now,(with(that(cleared(up…(– Assuming(that(dynamic(scoping(is(used,(what(is(output(by(the(
following(program?((
• void main() { int x = 0; f1(); g(); f2(); } • void f1() { int x = 10; g(); } • void f2() { int x = 20; f1(); g(); } • void g() { print(x); }
Monday, April 22, 13
![Page 12: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/12.jpg)
Symbol'Tables'• purpose:''
– keep'track'of'names'declared'in'the'program'– names'of'
• variables,'classes,'fields,'methods'• symbol'table'entry:''
– associates'a'name'with'a'set'of'a=ributes,'e.g.:'• kind'of'name'(variable,'class,'field,'method,'etc)'• type''(int,'float,'etc)'• nesBng'level''• memory'locaBon'(i.e.,'where'will'it'be'found'at'runBme)'
Monday, April 22, 13
![Page 13: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/13.jpg)
Review from Last Time
class MyClass implements MyInterface {
string myInteger;
void doSomething() {
int[] x;
x = new string;
x[5] = myInteger * y;
}
void doSomething() {
}
int fibonacci(int n) {
return doSomething() + fibonacci(n – 1);
}
}
Monday, April 22, 13
![Page 14: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/14.jpg)
Review from Last Time
class MyClass implements MyInterface {
string myInteger;
void doSomething() {
int[] x;
x = new string;
x[5] = myInteger * y;
}
void doSomething() {
}
int fibonacci(int n) {
return doSomething() + fibonacci(n – 1);
}
}
Interface not
declared
Wrong type
Variable not
declared
Can't multiply
strings
Can't redefine
functions
Can't add void
No main function
Monday, April 22, 13
![Page 15: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/15.jpg)
Review from Last Time
class MyClass implements MyInterface {
string myInteger;
void doSomething() {
int[] x;
x = new string;
x[5] = myInteger * y;
}
void doSomething() {
}
int fibonacci(int n) {
return doSomething() + fibonacci(n – 1);
}
}
Wrong type
Variable not
declared
Can't multiply
strings
Can't redefine
functions
Can't add void
No main function
Monday, April 22, 13
![Page 16: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/16.jpg)
Review from Last Time
class MyClass implements MyInterface {
string myInteger;
void doSomething() {
int[] x;
x = new string;
x[5] = myInteger * y;
}
void doSomething() {
}
int fibonacci(int n) {
return doSomething() + fibonacci(n – 1);
}
}
Wrong type
Variable not
declared
Can't multiply
strings
Can't add void
No main function
Monday, April 22, 13
![Page 17: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/17.jpg)
Review from Last Time
class MyClass implements MyInterface {
string myInteger;
void doSomething() {
int[] x;
x = new string;
x[5] = myInteger * y;
}
void doSomething() {
}
int fibonacci(int n) {
return doSomething() + fibonacci(n – 1);
}
}
Wrong typeCan't multiply
strings
Can't add void
No main function
Monday, April 22, 13
![Page 18: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/18.jpg)
Review from Last Time
class MyClass implements MyInterface {
string myInteger;
void doSomething() {
int[] x;
x = new string;
x[5] = myInteger * y;
}
void doSomething() {
}
int fibonacci(int n) {
return doSomething() + fibonacci(n – 1);
}
}
Wrong typeCan't multiply
strings
Can't add void
Monday, April 22, 13
![Page 19: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/19.jpg)
What Remains to Check?
● Type errors.
● Today:
● What are types?
● What is type-checking?
● A type system for Decaf.
Monday, April 22, 13
![Page 20: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/20.jpg)
Types&• What&is&a&type?&
– The&no/on&varies&from&language&to&language&
• Consensus&– A&set&of&values&– A&set&of&opera/ons&allowed&on&those&values&
Monday, April 22, 13
![Page 21: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/21.jpg)
Why$Do$We$Need$Type$Systems?$• Consider$the$assembly$language$fragment$
• addi$$$r1,$$r2,$$r3$
• What$are$the$types$of$$r1,$$r2,$$r3?$
Monday, April 22, 13
![Page 22: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/22.jpg)
Types&and&Opera,ons&• Certain&opera,ons&are&legal&for&values&of&each&type&
– It&doesn�t&make&sense&to&add&a&func,on&pointer&and&an&integer&in&C&
– It&does&make&sense&to&add&two&integers&
– But&both&have&the&same&assembly&language&implementa,on!&
Monday, April 22, 13
![Page 23: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/23.jpg)
Type%Systems%• A%language�s%type%system%specifies%which%opera7ons%are%valid%
for%which%types%
• The%goal%of%type%checking%is%to%ensure%that%opera7ons%are%used%with%the%correct%types%– Enforces%intended%interpreta7on%of%values%
• Type%systems%provide%a%concise%formaliza7on%of%the%seman7c%checking%rules%
Monday, April 22, 13
![Page 24: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/24.jpg)
What%Can%Types%do%For%Us?%• Can%detect%certain%kinds%of%errors%• Memory%errors:%– Reading%from%an%invalid%pointer,%etc.%
• ViolaAon%of%abstracAon%boundaries%
Monday, April 22, 13
![Page 25: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/25.jpg)
Type%Checking%Overview%• Three%kinds%of%languages:%
– Sta$cally(typed:%All%or%almost%all%checking%of%types%is%done%as%part%of%compila<on%(C,%Java)%
– Dynamically(typed:%Almost%all%checking%of%types%is%done%as%part%of%program%execu<on%(Scheme)%• Variable%types%depend%on%the%path%
– Untyped:%No%type%checking%(machine%code)%
Monday, April 22, 13
![Page 26: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/26.jpg)
The$Type$Wars$• Compe.ng$views$on$sta.c$vs.$dynamic$typing$• Sta.c$typing$proponents$say:$
– Sta.c$checking$catches$many$programming$errors$at$compile$.me$
– Avoids$overhead$of$run?.me$type$checks$• Dynamic$typing$proponents$say:$
– Sta.c$type$systems$are$restric.ve$– Rapid$prototyping$easier$in$a$dynamic$type$system$
• In$prac.ce,$most$code$is$wriDen$in$sta.cally$typed$languages$with$an$�escape�$mechanism$– Unsafe$casts$in$C,$Java$– The$best$or$worst$of$both$worlds?$
Monday, April 22, 13
![Page 27: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/27.jpg)
Type Systems
● The rules governing permissible operations on types forms a type system.
● Strong type systems are systems that never allow for a type error.
● Java, Python, JavaScript, LISP, Haskell, etc.
● Weak type systems can allow type errors at runtime.
● C, C++
Monday, April 22, 13
![Page 28: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/28.jpg)
Type%Checking%and%Type%Inference%• Type%Checking%is%the%process%of%verifying%fully%typed%programs%
• Given%an%opera:on%and%an%operand%of%some%type,%determine%whether%the%opera:on%is%allowed%%
• Type%Inference%is%the%process%of%filling%in%missing%type%informa:on%
• Given%the%type%of%operands,%determine%– the%meaning%of%the%opera:on%– the%type%of%the%opera:on%
• OR,%without%variable%declara:ons,%infer%type%from%the%way%the%variable%is%used%
• The%two%are%different,%but%are%oBen%used%interchangeably%
Monday, April 22, 13
![Page 29: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/29.jpg)
Issues%in%Typing%
• Does%the%language%have%a%type%system?%
– Untyped%languages%(e.g.%assembly)%have%no%type%system%at%all%
• When%is%typing%performed?%
– Sta?c%typing:%At%compile%?me%
– Dynamic%typing:%At%run?me%
• How%strictly%are%the%rules%enforced?%
– Strongly%typed:%No%excep?ons%%– Weakly%typed:%With%wellHdefined%excep?ons%
• Type%equivalence%&%subtyping%
– When%are%two%types%equivalent?%%
• What%does%"equivalent"%mean%anyway?%
– When%can%one%type%replace%another?%
Monday, April 22, 13
![Page 30: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/30.jpg)
Components)of)a)Type)System)• Built3in)types)• Rules)for)construc7ng)new)types)– Where)do)we)store)type)informa7on?)
• Rules)for)determining)if)two)types)are)equivalent)• Rules)for)inferring)the)types)of)expressions)
Monday, April 22, 13
![Page 31: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/31.jpg)
Component:)Built.in)Types)• Integer)
– usual)opera6ons:)standard)arithme6c))• Floa6ng)point)
– usual)opera6ons:)standard)arithme6c))• Character)
– character)set)generally)ordered)lexicographically)– usual)opera6ons:)(lexicographic))comparisons)
• Boolean)– usual)opera6ons:)not,)and,)or,)xor))
Monday, April 22, 13
![Page 32: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/32.jpg)
Component:)Type)Constructors)• Pointers)– addresses)– opera4ons:)arithme4c,)dereferencing,)referencing)– issue:)equivalency)))
• Func4on)types)– A)func4on)such)as)"int)add(real,)int)")has)type)real×int→int))
Monday, April 22, 13
![Page 33: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/33.jpg)
Component:)Type)Equivalence)• Name)equivalence)
– Types)are)equiv)only)when)they)have)the)same)name)• Structural)equivalence)
– Types)are)equiv)when)they)have)the)same)structure)• Example)
– C)uses)structural)equivalence)for)structs)and)name)equivalence)for)arrays/pointers)
)
Monday, April 22, 13
![Page 34: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/34.jpg)
Component:)Type)Equivalence)• Type)coercion)
– If)x)is)float,)is)x=3)acceptable?)• Disallow)• Allow)and)implicitly)convert)3)to)float)• "Allow")but)require)programmer)to)explicitly)convert)3)to)float)
– What)should)be)allowed?)• float)to)int)?)• int)to)float)?)• What)if)mulGple)coercions)are)possible?)
– Consider)3)+)"4")…)
Monday, April 22, 13
![Page 35: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/35.jpg)
Our Focus
● Decaf is typed statically and weakly:
● Type-checking occurs at compile-time.
● Runtime errors like dereferencing null or an invalid object are allowed.
● Decaf uses class-based inheritance.
● Decaf distinguishes primitive types and classes.
Monday, April 22, 13
![Page 36: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/36.jpg)
Typing in Decaf
Monday, April 22, 13
![Page 37: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/37.jpg)
Static Typing in Decaf
● Static type checking in Decaf consists of two separate processes:
● Inferring the type of each expression from the types of its components.
● Confirming that the types of expressions in certain contexts matches what is expected.
● Logically two steps, but you will probably combine into one pass.
Monday, April 22, 13
![Page 38: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/38.jpg)
An Example
while (numBitsSet(x + 5) <= 10) {
if (1.0 + 4.0) {
/* … */
}
while (5 == null) {
/* … */
}
}
Monday, April 22, 13
![Page 39: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/39.jpg)
An Example
while (numBitsSet(x + 5) <= 10) {
if (1.0 + 4.0) {
/* … */
}
while (5 == null) {
/* … */
}
}
Monday, April 22, 13
![Page 40: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/40.jpg)
An Example
while (numBitsSet(x + 5) <= 10) {
if (1.0 + 4.0) {
/* … */
}
while (5 == null) {
/* … */
}
}
Monday, April 22, 13
![Page 41: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/41.jpg)
An Example
while (numBitsSet(x + 5) <= 10) {
if (1.0 + 4.0) {
/* … */
}
while (5 == null) {
/* … */
}
}
Well-typed
expression with
wrong type.
Monday, April 22, 13
![Page 42: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/42.jpg)
An Example
while (numBitsSet(x + 5) <= 10) {
if (1.0 + 4.0) {
/* … */
}
while (5 == null) {
/* … */
}
}
Monday, April 22, 13
![Page 43: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/43.jpg)
An Example
while (numBitsSet(x + 5) <= 10) {
if (1.0 + 4.0) {
/* … */
}
while (5 == null) {
/* … */
}
}Expression with
type error
Monday, April 22, 13
![Page 44: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/44.jpg)
Inferring Expression Types
● How do we determine the type of an expression?
● Think of process as logical inference.
Monday, April 22, 13
![Page 45: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/45.jpg)
Inferring Expression Types
● How do we determine the type of an expression?
● Think of process as logical inference.
+
IntConstant IntConstant
137 42
Monday, April 22, 13
![Page 46: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/46.jpg)
Inferring Expression Types
● How do we determine the type of an expression?
● Think of process as logical inference.
+
IntConstant IntConstant
137 42
int
Monday, April 22, 13
![Page 47: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/47.jpg)
Inferring Expression Types
● How do we determine the type of an expression?
● Think of process as logical inference.
+
IntConstant IntConstant
137 42
int int
Monday, April 22, 13
![Page 48: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/48.jpg)
Inferring Expression Types
● How do we determine the type of an expression?
● Think of process as logical inference.
+
IntConstant IntConstant
137 42
int int
int
Monday, April 22, 13
![Page 49: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/49.jpg)
Inferring Expression Types
● How do we determine the type of an expression?
● Think of process as logical inference.
Monday, April 22, 13
![Page 50: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/50.jpg)
Inferring Expression Types
● How do we determine the type of an expression?
● Think of process as logical inference.
=
Identifierx =
Identifiery BoolConstanttruebool bool
bool
Monday, April 22, 13
![Page 51: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/51.jpg)
Inferring Expression Types
● How do we determine the type of an expression?
● Think of process as logical inference.
=
Identifierx =
Identifiery BoolConstanttruebool bool
boolbool
Monday, April 22, 13
![Page 52: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/52.jpg)
Inferring Expression Types
● How do we determine the type of an expression?
● Think of process as logical inference.
=
Identifierx =
Identifiery BoolConstanttruebool bool
boolbool
bool
Monday, April 22, 13
![Page 53: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/53.jpg)
Type Checking as Proofs
● We can think of syntax analysis as proving claims about the types of expressions.
● We begin with a set of axioms, then apply our inference rules to determine the types of expressions.
● Many type systems can be thought of as proof systems.
Monday, April 22, 13
![Page 54: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/54.jpg)
Sample Inference Rules
● “If x is an identifier that refers to an object of type t, the expression x has type t.”
● “If e is an integer constant, e has type int.”
● “If the operands e1 and e
2 of e
1 + e
2 are
known to have types int and int, then
e1 + e
2 has type int.”
Monday, April 22, 13
![Page 55: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/55.jpg)
Postconditions
Preconditions
Formalizing our Notation
● We will encode our axioms and inference rules using this syntax:
● This is read “if preconditions are true, we can infer postconditions.”
Monday, April 22, 13
![Page 56: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/56.jpg)
Formal Notation for Type Systems
● We write
⊢ e : Tif the expression e has type T.
● The symbol ⊢ means “we can infer...”
Monday, April 22, 13
![Page 57: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/57.jpg)
Our Starting Axioms
⊢ true : bool ⊢ false : bool
Monday, April 22, 13
![Page 58: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/58.jpg)
⊢ i : int
i is an integer constant
⊢ s : string
s is a string constant
Some Simple Inference Rules
⊢ d : double
d is a double constant
Monday, April 22, 13
![Page 59: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/59.jpg)
More Complex Inference Rules
⊢ e1 + e
2 : int
⊢ e1 : int
⊢ e2 : int
⊢ e1 + e
2 : double
⊢ e1 : double
⊢ e2 : double
Monday, April 22, 13
![Page 60: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/60.jpg)
More Complex Inference Rules
⊢ e1 + e
2 : int
⊢ e1 : int
⊢ e2 : int
⊢ e1 + e
2 : double
⊢ e1 : double
⊢ e2 : double
If we can show that e1
and e2 have type int…
Monday, April 22, 13
![Page 61: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/61.jpg)
More Complex Inference Rules
⊢ e1 + e
2 : int
⊢ e1 : int
⊢ e2 : int
⊢ e1 + e
2 : double
⊢ e1 : double
⊢ e2 : double
If we can show that e1
and e2 have type int…
… then we can show
that e1 + e2 has
type int as well
Monday, April 22, 13
![Page 62: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/62.jpg)
Even More Complex Inference Rules
⊢ e1 == e
2 : bool
⊢ e1 : T
⊢ e2 : T
T is a primitive type
⊢ e1 != e
2 : bool
⊢ e1 : T
⊢ e2 : T
T is a primitive type
Monday, April 22, 13
![Page 63: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/63.jpg)
Why Specify Types this Way?
● Gives a rigorous definition of types independent of any particular implementation.
● No need to say “you should have the same type rules as my reference compiler.”
● Gives maximum flexibility in implementation.
● Can implement type-checking however you want, as long as you obey the rules.
● Allows formal verification of program properties.
● Can do inductive proofs on the structure of the program.
● This is what's used in the literature.
● Good practice if you want to study types.
Monday, April 22, 13
![Page 64: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/64.jpg)
A Problem
⊢ x : ??
x is an identifier.
Monday, April 22, 13
![Page 65: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/65.jpg)
A Problem
⊢ x : ??
x is an identifier.
How do we know the
type of x if we don't
know what it refers to?
Monday, April 22, 13
![Page 66: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/66.jpg)
An Incorrect Solution
⊢ x : T
x is an identifier.x is in scope with type T.
Monday, April 22, 13
![Page 67: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/67.jpg)
An Incorrect Solution
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
⊢ x : T
x is an identifier.x is in scope with type T.
Monday, April 22, 13
![Page 68: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/68.jpg)
An Incorrect Solution
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : T
x is an identifier.x is in scope with type T.
Monday, April 22, 13
![Page 69: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/69.jpg)
An Incorrect Solution
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : T
x is an identifier.x is in scope with type T.
Monday, April 22, 13
![Page 70: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/70.jpg)
An Incorrect Solution
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : double⊢ x : double
⊢ x : T
x is an identifier.x is in scope with type T.
Monday, April 22, 13
![Page 71: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/71.jpg)
An Incorrect Solution
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : double⊢ x : double
⊢ x : T
x is an identifier.x is in scope with type T.
Monday, April 22, 13
![Page 72: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/72.jpg)
An Incorrect Solution
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : double
⊢ x : int
⊢ x : T
x is an identifier.x is in scope with type T.
Monday, April 22, 13
![Page 73: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/73.jpg)
An Incorrect Solution
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : double
⊢ x : int
⊢ x : T
x is an identifier.x is in scope with type T.
Monday, April 22, 13
![Page 74: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/74.jpg)
An Incorrect Solution
⊢ x : T
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : double
⊢ x : int
x is an identifier.x is in scope with type T.
⊢ d : double
d is a double constant
Monday, April 22, 13
![Page 75: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/75.jpg)
An Incorrect Solution
⊢ x : T
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : double
⊢ x : int
x is an identifier.x is in scope with type T.
⊢ d : double
d is a double constant
⊢ 1.5 : double
Monday, April 22, 13
![Page 76: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/76.jpg)
An Incorrect Solution
⊢ x : T
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : double
⊢ x : int
x is an identifier.x is in scope with type T.
⊢ 1.5 : double
Monday, April 22, 13
![Page 77: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/77.jpg)
An Incorrect Solution
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : double
⊢ x : int
⊢ 1.5 : double
⊢ x : T
x is an identifier.x is in scope with type T.
Monday, April 22, 13
![Page 78: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/78.jpg)
An Incorrect Solution
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : double
⊢ x : int
⊢ 1.5 : double
⊢ x : T
x is an identifier.x is in scope with type T.
⊢ e1 == e
2 : bool
⊢ e1 : T
⊢ e2 : T
T is a primitive type
Monday, April 22, 13
![Page 79: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/79.jpg)
An Incorrect Solution
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : double
⊢ x : int
⊢ 1.5 : double
⊢ x : T
x is an identifier.x is in scope with type T.
⊢ e1 == e
2 : bool
⊢ e1 : T
⊢ e2 : T
T is a primitive type
⊢ x == 1.5 : bool
Monday, April 22, 13
![Page 80: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/80.jpg)
An Incorrect Solution
int MyFunction(int x) {
{
double x;
}
if (x == 1.5) {
/* … */
}
}
Facts
⊢ x : double
⊢ x : int
⊢ 1.5 : double
⊢ x : T
x is an identifier.x is in scope with type T.
⊢ e1 == e
2 : bool
⊢ e1 : T
⊢ e2 : T
T is a primitive type
⊢ x == 1.5 : bool
Monday, April 22, 13
![Page 81: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/81.jpg)
Strengthening our Inference Rules
● The facts we're proving have no context.
● We need to strengthen our inference rules to remember under what circumstances the results are valid.
Monday, April 22, 13
![Page 82: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/82.jpg)
Adding Scope
● We write
S ⊢ e : Tif, in scope S, expression e has type T.
● Types are now proven relative to the scope they are in.
Monday, April 22, 13
![Page 83: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/83.jpg)
Old Rules Revisited
S ⊢ true : bool S ⊢ false : bool
S ⊢ i : int
i is an integer constant
S ⊢ s : string
s is a string constant
S ⊢ d : double
d is a double constant
S ⊢ e1 + e
2 : int
S ⊢ e1 : int
S ⊢ e2 : int
S ⊢ e1 + e
2 : double
S ⊢ e1 : double
S ⊢ e2 : double
Monday, April 22, 13
![Page 84: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/84.jpg)
A Correct Rule
S ⊢ x : T
x is an identifier.x is a variable in scope S with type T.
Monday, April 22, 13
![Page 85: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/85.jpg)
A Correct Rule
S ⊢ x : T
x is an identifier.x is a variable in scope S with type T.
Monday, April 22, 13
![Page 86: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/86.jpg)
Rules for Functions
S ⊢ f(e1, ..., e
n) : ??
f is an identifier.f is a non-member function in scope S.
f has type (T1, …, T
n) → U
S e⊢i : T
i for 1 ≤ i ≤ n
Monday, April 22, 13
![Page 87: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/87.jpg)
Rules for Functions
S ⊢ f(e1, ..., e
n) : ??
f is an identifier.f is a non-member function in scope S.
f has type (T1, …, T
n) → U
S e⊢i : T
i for 1 ≤ i ≤ n
Monday, April 22, 13
![Page 88: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/88.jpg)
Rules for Functions
S ⊢ f(e1, ..., e
n) : ??
f is an identifier.f is a non-member function in scope S.
f has type (T1, …, T
n) → U
S e⊢i : T
i for 1 ≤ i ≤ n
Monday, April 22, 13
![Page 89: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/89.jpg)
Rules for Functions
S ⊢ f(e1, ..., e
n) : ??
f is an identifier.f is a non-member function in scope S.
f has type (T1, …, T
n) → U
S e⊢i : T
i for 1 ≤ i ≤ n
Monday, April 22, 13
![Page 90: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/90.jpg)
Rules for Functions
S ⊢ f(e1, ..., e
n) : ??
f is an identifier.f is a non-member function in scope S.
f has type (T1, …, T
n) → U
S e⊢i : T
i for 1 ≤ i ≤ n
Monday, April 22, 13
![Page 91: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/91.jpg)
Rules for Functions
S ⊢ f(e1, ..., e
n) : U
f is an identifier.f is a non-member function in scope S.
f has type (T1, …, T
n) → U
S e⊢i : T
i for 1 ≤ i ≤ n
Monday, April 22, 13
![Page 92: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/92.jpg)
Rules for Arrays
S ⊢ e1[e
2] : T
S e⊢1 : T[]
S e⊢2 : int
Monday, April 22, 13
![Page 93: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/93.jpg)
Rule for Assignment
S ⊢ e1 = e
2 : T
S e⊢1 : T
S e⊢2 : T
Monday, April 22, 13
![Page 94: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/94.jpg)
Rule for Assignment
S ⊢ e1 = e
2 : T
S e⊢1 : T
S e⊢2 : T
If Derived extends Base, will this rule work for this code?
Base myBase;
Derived myDerived;
myBase = myDerived;
Monday, April 22, 13
![Page 95: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/95.jpg)
Typing with Classes
● How do we factor inheritance into our inference rules?
● We need to consider the shape of class hierarchies.
Monday, April 22, 13
![Page 96: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/96.jpg)
Single Inheritance
Single Inheritance
Instructor
LecturerProfessor TA
Keith JinchaoAlexAiken
Animal
Man Bear Pig
Monday, April 22, 13
![Page 97: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/97.jpg)
Multiple Inheritance
Multiple Inheritance
Animal
Man Bear Pig
ManBearPig
Instructor
LecturerProfessor TA
Keith JinchaoAlexAiken
Monday, April 22, 13
![Page 98: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/98.jpg)
Properties of Inheritance Structures
● Any type is convertible to itself. (reflexivity)
● If A is convertible to B and B is convertible to C, then A is convertible to C. (transitivity)
● If A is convertible to B and B is convertible to A, then A and B are the same type. (antisymmetry)
● This defines a partial order over types.
Monday, April 22, 13
![Page 99: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/99.jpg)
Types and Partial Orders
● We say that A ≤ B if A is convertible to B.
● We have that
● A ≤ A
● A ≤ B and B ≤ C implies A ≤ C
● A ≤ B and B ≤ A implies A = B
Monday, April 22, 13
![Page 100: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/100.jpg)
Updated Rule for Assignment
S ⊢ e1 = e
2 : ??
S e⊢1 : T
1
S e⊢2 : T
2
T2 ≤ T
1
Monday, April 22, 13
![Page 101: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/101.jpg)
Updated Rule for Assignment
S ⊢ e1 = e
2 : ??
S e⊢1 : T
1
S e⊢2 : T
2
T2 ≤ T
1
Monday, April 22, 13
![Page 102: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/102.jpg)
Updated Rule for Assignment
S ⊢ e1 = e
2 : ??
S e⊢1 : T
1
S e⊢2 : T
2
T2 ≤ T
1
Monday, April 22, 13
![Page 103: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/103.jpg)
Updated Rule for Assignment
S ⊢ e1 = e
2 : T
1
S e⊢1 : T
1
S e⊢2 : T
2
T2 ≤ T
1
Monday, April 22, 13
![Page 104: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/104.jpg)
Updated Rule for Assignment
S ⊢ e1 = e
2 : T
1
S e⊢1 : T
1
S e⊢2 : T
2
T2 ≤ T
1
Can we do better than this?
Monday, April 22, 13
![Page 105: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/105.jpg)
Updated Rule for Assignment
S ⊢ e1 = e
2 : T
2
S e⊢1 : T
1
S e⊢2 : T
2
T2 ≤ T
1
Monday, April 22, 13
![Page 106: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/106.jpg)
Updated Rule for Comparisons
S ⊢ e1 == e
2 : bool
S e⊢1 : T
S e⊢2 : T
T is a primitive type
Monday, April 22, 13
![Page 107: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/107.jpg)
Updated Rule for Comparisons
S ⊢ e1 == e
2 : bool
S e⊢1 : T
S e⊢2 : T
T is a primitive type
S ⊢ e1 == e
2 : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 and T
2 are of class type.
T1 ≤ T
2 or T
2 ≤ T
1
Monday, April 22, 13
![Page 108: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/108.jpg)
Updated Rule for Comparisons
S ⊢ e1 == e
2 : bool
S e⊢1 : T
S e⊢2 : T
T is a primitive type
S ⊢ e1 == e
2 : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 and T
2 are of class type.
T1 ≤ T
2 or T
2 ≤ T
1
Can we unify
these rules?
Monday, April 22, 13
![Page 109: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/109.jpg)
The Shape of Types
Engine
DieselEngineCarEngine
DieselCarEngine
Monday, April 22, 13
![Page 110: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/110.jpg)
The Shape of Types
Engine
DieselEngineCarEngine
DieselCarEngine
bool string doubleint
Monday, April 22, 13
![Page 111: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/111.jpg)
The Shape of Types
Engine
DieselEngineCarEngine
DieselCarEngine
bool string doubleintArrayTypes
Monday, April 22, 13
![Page 112: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/112.jpg)
Extending Convertibility
● If A is a primitive or array type, A is only convertible to itself.
● More formally, if A and B are types and A is a primitive or array type:
● A ≤ B implies A = B
● B ≤ A implies A = B
Monday, April 22, 13
![Page 113: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/113.jpg)
Updated Rule for Comparisons
S ⊢ e1 == e
2 : bool
S e⊢1 : T
S e⊢2 : T
T is a primitive type
S ⊢ e1 == e
2 : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 and T
2 are of class type.
T1 ≤ T
2 or T
2 ≤ T
1
Monday, April 22, 13
![Page 114: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/114.jpg)
Updated Rule for Comparisons
S ⊢ e1 == e
2 : bool
S e⊢1 : T
S e⊢2 : T
T is a primitive type
S ⊢ e1 == e
2 : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 and T
2 are of class type.
T1 ≤ T
2 or T
2 ≤ T
1
S ⊢ e1 == e
2 : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Monday, April 22, 13
![Page 115: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/115.jpg)
Updated Rule for Comparisons
S ⊢ e1 == e
2 : bool
S e⊢1 : T
S e⊢2 : T
T is a primitive type
S ⊢ e1 == e
2 : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 and T
2 are of class type.
T1 ≤ T
2 or T
2 ≤ T
1
S ⊢ e1 == e
2 : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Monday, April 22, 13
![Page 116: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/116.jpg)
Updated Rule for Function Calls
S ⊢ f(e1, ..., e
n) : U
f is an identifier.f is a non-member function in scope S.
f has type (T1, …, T
n) → U
S e⊢i : R
i for 1 ≤ i ≤ n
Ri ≤ T
i for 1 ≤ i ≤ n
Monday, April 22, 13
![Page 117: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/117.jpg)
A Tricky Case
S ⊢ null : ??
Monday, April 22, 13
![Page 118: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/118.jpg)
Back to the Drawing Board
Engine
DieselEngineCarEngine
DieselCarEngine
bool string doubleintArrayTypes
Monday, April 22, 13
![Page 119: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/119.jpg)
Back to the Drawing Board
Engine
DieselEngineCarEngine
DieselCarEngine
bool string doubleintArrayTypes
null Type
Monday, April 22, 13
![Page 120: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/120.jpg)
Handling null
● Define a new type corresponding to the type of the literal null; call it “null
type.”
● Define null type ≤ A for any class type A.
● The null type is (typically) not accessible
to programmers; it's only used internally.
● Many programming languages have types like these.
Monday, April 22, 13
![Page 121: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/121.jpg)
A Tricky Case
S ⊢ null : ??
Monday, April 22, 13
![Page 122: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/122.jpg)
A Tricky Case
S ⊢ null : null type
Monday, April 22, 13
![Page 123: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/123.jpg)
A Tricky Case
S ⊢ null : null type
Monday, April 22, 13
![Page 124: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/124.jpg)
Object-Oriented Considerations
S ⊢ new T : T
T is a class type.
S ⊢ NewArray(e, T) : T[]
S ⊢ e : int
S ⊢ this : T
S is in scope of class T.
Monday, April 22, 13
![Page 125: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/125.jpg)
What's Left?
● We're missing a few language constructs:
● Member functions.
● Field accesses.
● Miscellaneous operators.
● Good practice to fill these in on your own.
Monday, April 22, 13
![Page 126: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/126.jpg)
Typing is Nuanced
● The ternary conditional operator ? : evaluates an expression, then produces one of two values.
● Works for primitive types:
● int x = random()? 137 : 42;
● Works with inheritance:
● Base b = isB? new Base : new Derived;
● What might the typing rules look like?
Monday, April 22, 13
![Page 127: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/127.jpg)
A Proposed Rule
S ⊢ cond ? e1 : e
2 : ??
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Monday, April 22, 13
![Page 128: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/128.jpg)
A Proposed Rule
S ⊢ cond ? e1 : e
2 : ??
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Monday, April 22, 13
![Page 129: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/129.jpg)
A Proposed Rule
S ⊢ cond ? e1 : e
2 : ??
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Monday, April 22, 13
![Page 130: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/130.jpg)
A Proposed Rule
S ⊢ cond ? e1 : e
2 : ??
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Monday, April 22, 13
![Page 131: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/131.jpg)
A Proposed Rule
S ⊢ cond ? e1 : e
2 : max(T
1, T
2)
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Monday, April 22, 13
![Page 132: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/132.jpg)
A Proposed Rule
S ⊢ cond ? e1 : e
2 : max(T
1, T
2)
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Monday, April 22, 13
![Page 133: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/133.jpg)
A Proposed Rule
S ⊢ cond ? e1 : e
2 : max(T
1, T
2)
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Base
Derived1 Derived2
Super
Monday, April 22, 13
![Page 134: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/134.jpg)
A Proposed Rule
S ⊢ cond ? e1 : e
2 : max(T
1, T
2)
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Is this really
what we want?Base
Derived1 Derived2
Super
Monday, April 22, 13
![Page 135: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/135.jpg)
A Small Problem
S ⊢ cond ? e1 : e
2 : max(T
1, T
2)
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Base
Derived1 Derived2
Super
Monday, April 22, 13
![Page 136: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/136.jpg)
A Small Problem
S ⊢ cond ? e1 : e
2 : max(T
1, T
2)
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Base
Derived1 Derived2
Base = random()?
new Derived1 : new Derived2;
Super
Monday, April 22, 13
![Page 137: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/137.jpg)
A Small Problem
S ⊢ cond ? e1 : e
2 : max(T
1, T
2)
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T1 ≤ T
2 or T
2 ≤ T
1
Base
Derived1 Derived2
Base = random()?
new Derived1 : new Derived2;
Super
Monday, April 22, 13
![Page 138: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/138.jpg)
Least Upper Bounds
● An upper bound of two types A and B is a type C such that A ≤ C and B ≤ C.
● The least upper bound of two types A and B is a type C such that:
● C is an upper bound of A and B.
● If C' is an upper bound of A and B, then C ≤ C'.
● When the least upper bound of A and B exists, we denote it A ∨ B.
● (When might it not exist?)
Monday, April 22, 13
![Page 139: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/139.jpg)
A Better Rule
S ⊢ cond ? e1 : e
2 : T
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T = T1 ∨ T
2Base
Derived1 Derived2
Base = random()?
new Derived1 : new Derived2;
Super
Monday, April 22, 13
![Page 140: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/140.jpg)
… that still has problems
S ⊢ cond ? e1 : e
2 : T
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T = T1 ∨ T
2
Base1
Derived1 Derived2
Base2
Base = random()?
new Derived1 : new Derived2;
Monday, April 22, 13
![Page 141: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/141.jpg)
… that still has problems
S ⊢ cond ? e1 : e
2 : T
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T = T1 ∨ T
2
Base1
Derived1 Derived2
Base2
Base = random()?
new Derived1 : new Derived2;
Monday, April 22, 13
![Page 142: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/142.jpg)
Multiple Inheritance is Messy
● Type hierarchy is no longer a tree.
● Two classes might not have a least upper bound.
● Occurs C++ because of multiple inheritance and in Java due to interfaces.
● Not a problem in Decaf; there is no ternary conditional operator.
● How to fix?
Monday, April 22, 13
![Page 143: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/143.jpg)
Minimal Upper Bounds
● An upper bound of two types A and B is a type C such that A ≤ C and B ≤ C.
● A minimal upper bound of two types A and B is a type C such that:
● C is an upper bound of A and B.
● If C' is an upper bound of C, then it is not true that C' < C.
● Minimal upper bounds are not necessarily unique.
● A least upper bound must be a minimal upper bound, but not the other way around.
Monday, April 22, 13
![Page 144: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/144.jpg)
A Correct Rule
S ⊢ cond ? e1 : e
2 : T
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T is a minimal upper bound of T1 and T
2
Base1
Derived1 Derived2
Base2
Base1 = random()?
new Derived1 : new Derived2;
Monday, April 22, 13
![Page 145: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/145.jpg)
A Correct Rule
S ⊢ cond ? e1 : e
2 : T
S ⊢ cond : bool
S e⊢1 : T
1
S e⊢2 : T
2
T is a minimal upper bound of T1 and T
2
Base1
Derived1 Derived2
Base2
Base1 = random()?
new Derived1 : new Derived2;
Can prove both that
expression has type Base1
and that expression has
type Base2.
Monday, April 22, 13
![Page 146: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/146.jpg)
So What?
● Type-checking can be tricky.
● Strongly influenced by the choice of operators in the language.
● Strongly influenced by the legal type conversions in a language.
● In C++, the previous example doesn't compile.
● In Java, the previous example does compile, but the language spec is enormously complicated.
● See §15.12.2.7 of the Java Language Specification.
Monday, April 22, 13
![Page 147: Semantic Analysis: Type Checkingcseweb.ucsd.edu/classes/sp13/cse131-b/slides/Lecture6-TypeChecki… · Lexical Analysis Semantic Analysis Syntax Analysis IR Generation IR Optimization](https://reader035.fdocuments.net/reader035/viewer/2022062605/5fcdbd0f401e9e6e7f1a3ec1/html5/thumbnails/147.jpg)
Next Time
• More type checking...
Monday, April 22, 13