SAN 474

Compilers

Title: Languages, Interfaces, and Their Processors

Credit Hours: Three

Course Description:

Prerequisite:
Course Objectives: A. To examine the nature of programming languages. 1. to understand the important syntactic constructs in programming languages
2. to understand the advantages/disadvantages of languages from the various language categories: imperative, functional, logic, object-oriented, and concurrent.
3. to be able to evaluate programming languages in order to select the most appropriate one for the current need.
4. to appreciate the various formal methods of specifying syntax.
5. to differentiate between syntax, semantics, and pragmatics.
B. To understand the operating and design principles behind language translators. 1. to understand the major components of a compiler: scanner, parser, code generator, code optimizer.
2. to have a working knowledge of at least one parsing technique and an acquaintance with other techniques.
C. To experience a large computer system development in the area of systems programming rather than application programming.
D. To gain some experience in the use of tools in software development.
Textbook: Reference Books: Fischer, Charles and Richard J. LeBlanc, Crafting a Compiler with C, Benjamin/ Cummings Publishing Company, Inc., Menlo Park, California, 1991.
Sethi, Ravi, Programming Languages Concepts and Constructs, Addison-Wesley Publishing Company, Reading, Mass., 1989.
Pratt, Terrence W., Programming Languages: Design and Implementation, second edition, Prentice-Hall, Inc., 1984.
Ledgard, Henry and Michael Marcotty, The Programming Language Landscape, Science Research Associates, 1981.
Methods of Evaluation: The reason for giving a grade is to accurately and fairly assess your knowledge and performance in the class. I attempt to create exams which accurately assess your understanding and I will not deliberately create "trick" questions--however the material in this class is difficult and the exams will reflect the degree of difficulty. You should critically evaluate the grading of all assignments and tests. If you feel any item was misgraded or the question was not clearly stated, state your argument on a separate piece of paper and I will consider your reasoning and give you a prompt reply. If you understand the material I would like to give you the points!

The final grade will be determined by computing a weighted average of scores in each of the following categories:

Midterm Test 25 %
Final Exam 25 %
Compiler Project 35 %
Homework 15 %
 
The letter grade assigned for the course will be based upon the following scale:
  90-100 A, A-
80-90 B+, B, B-
70-80 C+, C, C-
60-70 D+, D, D-
below 60 F
 
Graduating seniors will not be required to take the final examination. For a graduating senior electing to skip the final, grades will be determined as a weighted average of scores in each of the following categories: However, if a senior has an unexcused absence during the last two weeks of the semester, he/she must then take the final.
  Midterm Test 35 %
Compiler Project 45 %
Homework 20 %
Tentative Course Schedule:
 
Week
Date
Topic
Text Chapter
1
January 14  Course introduction, Introduction to compiling
1
  January 16 Review of regular sets, grammars, Finite State Machines  
2
January 21 Review of grammars and languages - CF, CS  
  January 23 Overview of Compiling
2
3
January 28 Overview of Compiling  
  January 30 Lex  
4
February 4  Lex and Yacc  
  February 6 Yacc  
5
February 11 Lexical Analysis  
  February 13 Lexical Analysis
3
6
February 18 Monday/Tuesday swap - No Class  
  February 20 Syntax Analysis
4
7
February 25 Syntax Analysis  
  February 27 Syntax Analysis  
8
March 4 Syntax-Directed Translation
5
  March 6 Midterm Exam  
9
March 10 - 15 Spring Break  
10
March 18 Syntax-Directed Translation  
  March 20 Syntax-Directed Translation  
11
March 25 Type-Checking
6
  March 27 Type-Checking  
12 
April 1 Type-Checking  
  April 3 Run-Time Environments
7
13
April 8 Run-Time Environments  
  April 10 Run-Time Environments  
14 
April 15 Intermediate Code Generation
8
  April 17 Intermediate Code Generation  
15
April 22 Code Generation
9
  April 24 Code Generation  
16
April 29 Code Optimization
10
  May 1 Code Optimization  
       
  May 7 Final Examination: 5:30 PM   
 
Return to Jim Kiper Home Page