CMSC 124: Design and Implementation of Programming Languages
Course Description
This course covers the fundamental concepts in the design and implementation of
current high-level programming languages; syntax and translation; language definition
structures; elementary and structured data types; abstraction mechanisms; sequence
and data control; and run time considerations.
Course Learning Outcomes
After completion of the course, the student should be able to:
- Compare the run time behavior of programs written in different languages.
- Evaluate the structure of programming language specification, analysis, and implementation.
- Analyze and solve programs related to lexical analysis, parsing and translation problems.
- Develop the skills necessary to learn new programming languages quickly.
- Attain reasonable proficiency in the Git, GitHub, CLISP, Prolog, and R languages.
Course Outline
UNIT 1. Introduction to Programming Languages
- Preliminaries
- Evolution of the Major Programming Languages
UNIT 2. Describing Syntax and Semantics
- The General Problem of Describing Syntax
- Formal Methods of Describing Syntax
- Attribute Grammars
- Describing the Meanings of Programs: Dynamic Semantics
UNIT 3. The Structure of a Compiler
- Lexical Analysis
- Syntax Analysis
- Semantic Analysis
- Intermediate Code Generation
- Code Optimization
- Code Generation
- Symbol-Table Management
UNIT 4. Names, Bindings, and Scope
- Names
- Variables
- The Concept of Binding
- Scope and Lifetime
- Referencing Environment
- Named Constant
UNIT 5. Data Types
- Primitive Data Types
- Character String Types
- Enumeration Types
- Array Types
- Associative Arrays
- Record Types
- Tuple Types
- List Types
- Union Types
- Pointer and Reference Types
UNIT 6. Expressions and Assignment Statements
- Arithmetic Expressions
- Overload Operators
- Type Conversions
- Relational and Boolean Expressions
- Short-Circuit Evaluation
- Assignment Statements
- Mix-mode Assignment
UNIT 7. Statement-Level Control Structures
- Selection Statements
- Iterative Statements
- Unconditional Branching
UNIT 8. Subprograms
- Fundamentals of Subprograms
- Design Issues for Subprograms
- Local Referencing Environments
- Parameter-Passing Methods
- Overloaded Subprograms
- Generic Subprograms
UNIT 9. Implementing Subprograms
- The General Semantics of Calls and Returns
- Implementing “Simple” Subprograms
- Implementing Subprograms with Stack-Dynamic Local Variables
- Nested Subprograms
- Blocks
- Implementing Dynamic Scoping