Course Outline - CMPE318

Course Overview:

This course explores the fundamental principles underlying programming languages, including their formal specification through syntax, analysis, and semantics. Students will examine the historical evolution of programming paradigms and key concepts such as naming, scope, data representation, and evaluation sequences at various levels. The course covers object-oriented programming with a focus on abstraction, inheritance, polymorphism, concurrency, and exception handling, along with an introduction to alternative paradigms such as functional, logical, and scripting languages. Weekly homework and lab assignments complement lectures, reinforcing theoretical concepts through hands-on practice.

Learning Objectives:

Upon successful completion of the course, students are expected to have the following competencies:

  1. Draw an annotated parse tree for a given input and attribute grammar
  2. Have knowledge of various programming languages, their features, history and category
  3. Use LR parsing tables for bottom up parsing of a given input
  4. Work effectively with context free grammars
  5. Draw a parse tree for a sentence in a language, given its grammar
  6. Derive a sentence in a language, given its grammar
  7. Demonstrate that a specific grammar is ambiguous
  8. Write a simple lexical analyzer
  9. Write a simple top-down parser
  10. Show the contents of the system stack after several function calls
  11. Differentiate between static and dynamic scope
  12. Trace output of programs with various parameter passing methods
  13. Be familiar with the implementation techniques of object-oriented constructs
  14. Write and trace simple programs in the Haskell Functional Programming Language

Reading and Resource List:

  • Textbook: SEBESTA, Robert W.: Concepts of Programming Languages, 10th Edition, Pearson Intl (Addison-Wesley), 2013. ISBN: 0-321-50968-4.
  • Lecture Notes

Topics Covered and Class Schedule:

  • Week 1: Introduction
  • Week 2: History
  • Week 3: Describing Syntax and Semantics
  • Week 4: Lexical and Syntax Analysis
  • Week 5: Names, Bindings, Type Checking, Scopes, Data Types
  • Week 6: Expressions and Assignment Statements
  • Week 7: Control Structures
  • Week 8: Functional Programming
  • Week 9: Subprograms
  • Week 10: Implementing Subprograms
  • Week 11: Abstract Data Types and Encapsulation Concepts
  • Week 12: Support for Object-Oriented Programming
  • Week 13: Concurrency (Time permitting)
  • Week 14: Exception Mechanism (Time permitting)

Assignments and Labs:

Weeks 3-4: C++ data structures
Weeks 5-6: Lexical analysis
Weeks 7-8: Syntax analysis
Weeks 9-12: Haskell programming

Assessment Methods:

MethodNumberPercentage
Midterm Exam135%
Final Exam145%
Lab works
420%
Attendance
-0%

Additional Information:

All documents related to the course will be shared on the course web page. Visit the address regularly. All announcements in this area are deemed to have been made to all students taking the course and students are responsible for the announcements. All education, teaching activities, explanations, and, announcements made during the courses are deemed to have been received by all students, whether they attend the course or not.

Computation of the attendance grade: Proportional to the number of days in which the student attended lectures. Attendance will start to be taken once the add-drop period has ended.

Policy on makeups: For eligibility to take a makeup exam, the student should bring a doctor's report within 3 working days of the missed exam.

Policy on the NG grade: If you miss two exams with no valid excuse, you will be given the NG grade.

Policy on missed labs: There will be no makeup for missed labs. If you cannot attend a lab for some reason, you should contact the assistant beforehand so that you can present your work in advance.