A1 (due August 20, 23:55)
Implement a language for network visualization. The input is a specification of representing connections, and manipulating them. The output would be a graphviz-readable file that can be manually viewed.

Learning outcomes: lex-yacc introduction, symbol table introduction, translation, nested constructs.

A2 (due September 14, 23:55)
Implement a language for a subset of HTML generation. The input is a specification of representing tables and other elements such as links and images. The output would be a valid HTML which can be viewed using a browser.

Learning outcomes: lex-yacc, variable declarations and attributes, error handling, generation of nested constructs.

A3 (due October 5, 23:55)
Code generation for a reasonably large subset of C. Generate IR in three-address form. Optimize it to minimize the number of temporaries. Generate assembly code. Use the x86 assembler to generate the executable code and run it. Check if the unoptimized and the optimized versions' outputs match.

Learning outcomes: code generation for a general purpose language, managing scopes, arrays and functions, assembly code, simple optimization.

A4 (due November 2 + 7, 23:55)
Design a language for graph algorithms. Implement various graph algorithms using it. Submit Single Source Shortest Path and DFS. We should be able to use your code-generator to compile your SSSP/DFS codes, and run them. The output code must be C. You should also submit a new algorithm specification within the second deadline.

Learning outcomes: language design, domain-specific language, code optimization.

course home page