16.01.2015 Views

CS2013-final-report

CS2013-final-report

CS2013-final-report

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Given the nature of tutorials, it can be difficult to quantify the number of hours spent on a topic. Below, I base the<br />

hours dedicated to each unit by assuming roughly 3 hours of contact time with the students during each week of<br />

the 12-week semester.<br />

How are students assessed<br />

Students are assessed via the preparedness and contributions to the weekly discussions, by their written solutions<br />

to problem set questions, and by the quality and correctness of their compiler implementations. Students also give<br />

presentations on their <strong>final</strong> projects to the entire class.<br />

Course textbooks and materials<br />

The primary textbook is Compilers: Principles, Techniques, and Tools by Aho, Lam, Sethi, and Ullman. Papers<br />

from the primary literature are also included when possible. Supplementary material for background reading and<br />

for the project is provided on a website.<br />

Why do you teach the course this way<br />

The tutorial format offers a unique opportunity to tailor material specifically to student interest, and to allow them<br />

to explore and learn material on their own. The interactions between tutorial partners in the weekly meetings<br />

develops communication skills and thought processes that cannot be as easily fostered in lecture-style courses.<br />

The group projects also enable students to develop solid software engineering practices and to appreciate the<br />

theoretical foundations of each phase of compilation.<br />

The students all enjoy the tutorial-style and collaborative environment it fosters, and they typically rate this class<br />

among the most challenging offered at Williams.<br />

Body of Knowledge coverage<br />

KA Knowledge Unit Topics Covered Hours<br />

PL Basic Type Systems All (mostly review of existing knowledge) 2<br />

PL<br />

PL<br />

Program<br />

Representation<br />

Language Translation<br />

and Execution<br />

All 2<br />

All 3<br />

PL Syntax Analysis All 5<br />

PL<br />

Compiler Semantic<br />

Analysis<br />

All 5<br />

PL Code Generation All 5<br />

PL Runtime Systems All 5<br />

PL Static Analysis Relevant program representations, such as basic blocks, controlflow<br />

graphs, def-use chains, static single assignment, etc.<br />

Undecidability and consequences for program analysis<br />

Flow-insensitive analyses: type-checking<br />

Flow-sensitive analyses: forward and backward dataflow analyses<br />

Tools and frameworks for defining analyses<br />

Role of static analysis in program optimization<br />

Role of static analysis in (partial) verification and bug-finding<br />

SE Software Design System design principles<br />

Refactoring designs and the use of design patterns.<br />

6<br />

2<br />

- 354 -

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!