Programming Language Concepts
Tuesdays, Thursdays 14:00-15:20
University Crossings 151
Introduces the design and implementation of modern programming languages: formal theory underlying language implementation; concerns in naming, binding, storage allocation and typing; semantics of expressions and operators, control flow, and subprograms; procedural and data abstraction; functional, logic, and object-oriented languages. Students will construct an interpreter for a nontrivial language.
This is a required by all Computer Science students. Normally it is taken in the pre-junior year. The course is available to other students with sufficient programming experience (see prerequisites) who have an interest in programming languages, e.g., Information Systems, Computer Engineering, Software Engineering, etc.
To understand context-free grammars and be able to translate an intuitive specification of a grammar into a precise representation.
To understand recursive descent parsing, when it is applicable, and be able to write a recursive descent parser for a simple grammar.
To understand the advantages and disadvantages of the major programming language paradigms. To gain basic understanding of object-oriented features such as class hierarchies, inheritance, polymorphism, and dynamic dispatch.
To understand the major issues in the design of programming languages, such as static versus dynamic scoping, intricacies of strong versus weak typing.
To implement an interpreter for a small but nontrivial language.
There are four programming assignments, where students write a scanner and parser, implement a translator, implement and interpreter, and experiment with different programming paradigms (e.g. functional and logic). Each assignment takes two weeks.
The text for the course is Kenneth C. Louden, Programming Languages: Principles and Practice, 3rd Edition, Course Technology. ISBN: 9781111529413.
We will also use Structure and Interpretation of Computer Programs, which is available online.
In addition to the official text book listed above, a variety of resources for different programming languages will be made available and should be consulted. All students must have access to the necessary compilers and interpreters for the different languages discussed, which will be made available on the department of Computing computers. All required software is also publicly available.
Grades will be weighted as follows:
All students have two late days, which may be used at any time to turn in homework late without penalty. After consuming all late days, the late penalty is 25% per day per homework. A student wishing to use a late day must notify the course staff immediately—late days will not be applied retroactively.
In the case of extenuating circumstances, please contact me and we will make an appropriate arrangement.
If you join the course late, you are still responsible for completing all work you may have missed and for completing all future assignments on time. You must contact me within one week of joining the course to arrange completion deadlines for any missed work. Failure to do so will result in a zero for all missed work.
We will use BlackboardLearn for discussion and announcements. You should feel free to answer as well as ask question in the discussion forum as long as you are not providing an answer to a homework problem. You may not post code for solving homwework problems on BlackboardLearn, even if the code is incomplete. If you are unsure whether or not a post is appropriate, contact the course staff via email.
Students must abide by the University Academic Integrity policy. All work must be your own. You may not copy code from any source, including from other students, nor may you show your code to other students.
This course follows university, college, and department policies, including but not limited to:
The instructor(s) may, at his/her/their discretion, change any part of the course before or during the term, including assignments, grade breakdowns, due dates, and schedule. Such changes will be communicated to students via the course web site. This web site should be checked regularly and frequently for such changes and announcements.