INF225 Fall 2013
About the Course
This course will introduce you to the implementation and engineering of software languages. The term software language refers to artificial languages used in software development, including general-purpose programming languages, domain-specific languages, modeling and metamodeling languages, data models and ontologies. Although we may focus mainly on programming languages, many of the techniques should have wider applicability.
The skills and knowledge you'll learn should be useful in many different scenarios, such as:
- Making a program scriptable or highly configurable
- Using and designing data formats
- Making domain-specific languages (such as an industrial or robot control language, a query language or a game scripting language)
- Performance-tuning programs using knowledge of compilers, optimisations and runtime environments
- Doing automated custom refactoring and code analysis
After successfully completing the course, you should:
- be able to define and use important theoretical concepts such as languages, grammars, syntax trees, dependencies, symbol tables and typical internal representations,
- be able to make sound technology choices and evaluate the use of software language technology,
- be able to explore and make use of relevant research literature on your own,
- be familiar with modern techniques and tools.
The course will hava a common part, a self-selected part and a term project:
The common part will teach you about theory and relevant technologies, including fundamental theory on parsing, syntax trees, code representation, code transformation and specification techniques.
The self-selected part will allow you to go deeper into a topic you find particularly interesting; for example, parsers, just-in-time compilers, interpreters, dynamic languages, domain-specific languages.
The term project will give you practical engineering experience by developing a tool or language implementation; for example, by implementing a small compiler or interpreter, a static analysis tool, code optimisations, or something else you find interesting. Ideally, this will be related to your self-selected topic.
The course is fairly practical in nature (although there is some theory to be learned). You will need to solve various programming exercises in the lab. Expect to be challenged by strange tools and languages!
Exam and Grading
The exam will be oral if there are few enough students, or written if there are many students. Exam date will be decided later.
You will have to present your term project and your self-selected topic, either at the exam or separately (depending a bit on the exam form).
Your grade will be determined based on:
- your knowledge, maturity and insight into theory and technology,
- your term project and your ability to evaluate your work and choices
The first lecture was Monday, August 19th.
- Check the Course Plan. Note that Anya is travelling a bit, so some weeks will have no lecture or just one lecture.
- Monday 10.15–12.00 (room 2143)
- Thursday 12.15–14.00 (room 2143)
- Friday 14.15-16.00 (Faklab 4 or room 2103)
There is no textbook you need to buy, but I'll recommend some books you might want to buy or borrow, depending on your interests.
The syllabus consists of:
Lecture notes and selected papers
All lectures, exercises and notes posted online. You might want to exchange notes with other students if you miss some lectures.
You are expected to evaluate and provide feedback on the course, both during and after the course.