Classes and objects IV
Lecture 16
Table of Contents
Review
Questions about the last class?
Quiz
What is the difference between virtual and non-virtual functions?
Quiz Discussion
Semantic rules
cd ::= class c { d* } // class declaration
cd ::= impl c { f* } // class implementation
t ::= int // integer type
| bool // boolean type
| string // string type
| (t+) -> t // function type
| class c // class type
n ::= x // simple name
| n . x // qualified name
s ::= init x ;
| delete x ;
// denotational semantics
[[ class c { d* } ]] ::= struct c { [[ d* ]](c) };
[[ impl c { f+ } ]] ::= [[ f+ ]](c)
[[ init x ; ]] ::= x = malloc(sizeof(* x)); [[ initFuncs(x) ]]
[[ delete x ; ]] ::= free(x);
[[ d ]](c) ::= type.getFieldType(d.ID, c) ;
[[ f ]](c) ::= f.returnType.getDeclarationType(mangleDefName(c, f.IO)) ( struct c * this [[ arg* ]] ) { [[ d* ]] [[ st* ]] }
[[ arg ]] ::= , scope.getSymbol(arg.ID).getReferenceType(arg.ID)
Initializing function pointers
initFuncs(x) {
type = scope.getTypeAnyScope(x)
className = type.name
classScope = scope.getScopeAny(className)
for each symbol in classScope
if classScope.symbols.get(symbol).key() == Type.Kind.FUNCTION
emit( x -> symbol = mangleDefName(className, symbol) ; )
scope.getScopeAny().symbols.keySet()
}
COOL is another illustration of the semantics of an object-oriented language.
Implementing the semantic rules
Project
(3.5 weeks)
Implement the ClassC extension to SimpleC, i.e., the type-checker extension and the code generation extension.
- Skeleton
- Includes complete type checker and code generator
- ClassTypechecker.java
- ClassCodeGen.java
Getting the skeleton
Be sure to unzip the tarfile in the root of your existing repo. It depends on having access to the original Grammar.g4.
# from the parent of your project folder wget http://www.cs.ucf.edu/~gazzillo/teaching/cop5621spring23/lectures/src/classc.tar cd project-NAME tar -xvf ../classc.tar ./ git add src/classc git commit -m "Added classc skeleton"
References to keep on hand
- Keep open the following while implementing the type checker
- The ClassC grammar extension (Grammar.g4)
- The type rules
- The semantics