16.01.2015 Views

CS2013-final-report

CS2013-final-report

CS2013-final-report

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CS453: Introduction to Compilers, Colorado State University<br />

Fort Collins, CO<br />

Michelle Strout<br />

mstrout@cs.colostate.edu<br />

http://www.cs.colostate.edu/~cs453<br />

Knowledge Areas that contain topics and learning outcomes covered in the course<br />

Knowledge Area<br />

Programming Languages (PL) 38<br />

Software Engineering (SE) 8<br />

Algorithms and Complexity (AL) 4<br />

Total Hours of Coverage<br />

Where does the course fit in your curriculum<br />

This course is an elective for senior undergraduates and first year graduate students offered once a year in the<br />

spring semester. Typically about 20-25 students take this course. The prerequisite for this course is a required<br />

third year Software Development Methods course.<br />

What is covered in the course<br />

CS 453 teaches students how to implement compilers. Although most computer science professionals do not end<br />

up implementing a full compiler, alumni of this course are surprised by how often the skills they learn are used<br />

within industry and academic settings. The subject of compilers ties together many concepts in computer science:<br />

the theoretical concepts of regular expressions and context free grammars; the systems concept of layers including<br />

programming languages, compilers, system calls, assembly language, and architecture; the embedded systems<br />

concept of an architecture with restricted resources; and the software engineering concepts of revision control,<br />

debugging, testing, and the visitor design pattern. Students write a compiler for a subset of Java called<br />

MeggyJava. We compile MeggyJava to the assembly language for the ATmega328p microcontroller in the Meggy<br />

Jr RGB devices.<br />

Course topics:<br />

• Regular and context free languages including DFAs and NFAs.<br />

• Scanning and parsing<br />

o Finite state machines and push down automata<br />

o FIRST and FOLLOW sets<br />

o Top-down predictive parsing<br />

o LR parse table generation<br />

• Meggy Jr Simple runtime library<br />

• AVR assembly code including the stack and heap memory model<br />

• Abstract syntax trees<br />

• Visitor design pattern<br />

• Semantic analysis including type checking<br />

• Code generation for method calls and objects<br />

• Data-flow analysis usage in register allocation<br />

• Iterative compiler design and development<br />

• Test-driven development and regression testing<br />

• Revision control and pair programming<br />

- 348 -

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

Saved successfully!

Ooh no, something went wrong!