Abstract
This paper seeks to combine a traditional 'deep domain' project course (compiler construction) with the software engineering process. Most undergraduates majoring in computer science and/or computer engineering become software practitioners to meet the massive demands in industry, military, or government for large software development. The compiler course is one of the few chances an undergraduate student at an ordinary college will get to write a realistic large program of 1000 lines (or more) and to make it work. In addition, compiler construction techniques are applicable to a variety of software. The course involves a progressive and team programming project for a subset of some real structured programming languages such as ANSI-C. The software engineering practice concentrates on the implementation level, i.e., issues on detailed design, coding and documenting, and unit and integration testing. These issues are the major problems that most undergraduates will face. However, the software engineering course offered at most colleges discusses high-level software specification and design intensively, but is unable to cover the implementation issues in detail. Thus, this course makes a nice complement to a software engineering course. New educational methods are adopted for teaching such a course.