2110316  Programming Languages Principles 3(3-0-6)

1st semester  2009

official course description

this course description

This course is divided into three equal parts.  Three parts are taught by three different lecturers.

1) Programming Language concepts, Twittee  MO 13:00-16:00  Eng3 418
2) Real programming languages, Vishnu          MO 13:00-16:00  Eng3 420
3) Language and implementation, Prabhas       MO 13:00-16:00  Eng3 403


Principal lecturer: Twittee

The goal of this course is to make you understand the languages you use. To make you appreciate diversity of ideas in programming and prepare you for new programming methods and paradigms. Theoretical foundations will be presented. You will know properties of language, not just syntax. Moreover, you will recognize the cost of presenting an abstract view of machine and understand trade-offs in programming language design.  

Each part will be taught separately and independently. It is logical that the assessment will also be arranged according to this structure. There is no midterm exam (besides whatever assess by the lecturer at that time) and the final exam will contain all materials taught in the course.

Assessment

each part  20%  by 3  = 60%
final exam                      40%

the lecture schedule:
section 1: A, B, C  
section 2: B, C, A
section 3: C, A, B

A) Programming Language concepts, Twittee
B) Real programming languages, Vishnu
C) Language and implementation, Prabhas

part C: Language and implementation

Announcement

Final Mock exam is out   please have a look  14 Sept 2009

Score for Section 3

Old announcements (section 3)

Section 2

1)  12 Aug -- We will have a mini-exam next week, Monday 17th Aug 2009, a 30 minutes quiz.  The question is how to do code generation.  You will be given a piece of Nut-program.  You have to write  abstract syntax trees from this source and a listing in S-code.

 

Study Plan

each week has 3 hrs, max 5 weeks
plan for 4 weeks, with one to spare
each week has 2 sessions of 1 1/2 hrs. each.

a homework will be handed out each week.
one project will be issued on week 6.

workload

1 small project
2 mini exams
4 homeworks, running the code

Lecture sessions

1  structure of a compiler      Overview of the course   (from Stanford slide)     Compiler (ppt)
   HLL to LLL to processor architecture   Nut language manual  
2  lexical analyser                 Scanner (ppt)
   automaton
   actual code                       Session on how to use the tools      Overview of Nut compiler
--------------
3  parser
4  grammar                           Context Free Grammar  (ppt)
    mini-exame1
----------------
5  recursive descent              Parsing (ppt)    we are interested only in top-down parsing (no need to read bottom-up)
6  actual parser                      pseudo code of nut parser     
    recursive evaluator             pseudo code of the evaluator
-----------------
7  code generator                
   HLL to LLL                      example of parsing  Nut program to N-code
   s-code                              Code Generation  (with examples)    How to do code generation
8  actual code generator       summation: quiz in class              
   mini-exam2
-----------------
9  sx-chip                             microprogramming    sx-chip 
   instruction set                   how to microprogram sx-chip    sx-microp
   data path
   execution cycle
10  additional topics
  submit project

Assessment for part C

homework 5%     2 quizes  5+5%    one project 5%      total 20%

Homework

Old homework (section 3)

Section 2

4)  (10 Aug) Your home work is to try to compile and generate S-code (read how to do codegeneration) with the example program from the class:

 

(def isnull a () (< a 0))

(def tail a () (vec a 1))

 

(def len (a) ()

  (if (isnull a) 0

    (+ 1 (len (tail a)))))

 

Produce the S-obj from this input source and then proceed to "disassemble" the S-obj by hand into a human readable S-code.  (Don't try to run this piece of S-obj as the program is not complete, it requires the input of len to be a list).  You can try to compile and generate code and run some other program that use simple input.

 

I have include "ex-ch2.lst" in the directory "codegen" so that you can see what to be expected as a listing of a S-code listing file.

 

Project

old-project

The nature of the project is to read and write a report based on topics in programming language processing.  The report is a short one (5-6 pages) and should take around one week to complete.  You should take about 10 hours reading.  Then, write in your own words, not more than 4-5 pages, analyse and summarise what you "know" about it.

Section 2 (start with Vishnu)
We will focus on Java Virtual Machine (JVM).  There are many interesting topics concerning JVM many of which concentrate on making JVM faster (such as Jalapeņo project by IBM) and many others.  Or to convert from Java byte code to odinary programming languages. Or Concurrent JVM, or many other extensions such as functional etc. The least is to compare S-code to Java byte code, or their differences in internal structure (such as Stack frame arrangement).  In short, anything that you fancy (or and get your hands on) the topic of implementation of JVM and related topics.  Have fun!  (hand-in before next Monday 24 Aug when you change section).

Reference Text

  1. Aho, Sethi, Ullman, Compilers: Principles, Techniques, and Tools. Addison-Wesley, latest edition.
  2. Louden, K.C., Compiler Construction: Principles and Practice. PWS Publishing Co., 1997.
  3. A few chapters from my textbook, Essence of Computer System Engineering, forthcoming, 2009.

The first one is the standard text book on compiler. It has been used in more than 100 universities in North America.  It is a bit difficult to read as it contains a lot of theory.   The second one (Louden) is much easier to read.  I will update some chapter from my textbook from time to time as necessary.

My text

Chapter 2    Nut language manual
Chapter 3    Nut compiler
Chapter 4    Code generator
Chapter 5    Microprogramming

Tools

1.   Nut compiler (executable)     nut32.exe
2.   Full Nut compiler in Nut        nut.txt
3.
   Nut virtual machine to be used to run Nut object code    nsim32.exe
4.
   Source for my nut32 compiler and nsim32  in C  (for those who want to dig deep).   nut32-source.zip
5.   build-your-own-compiler   excercise

6.   Nut S-code code generator in Nut    gen2.txt  (for section 3)    gen21.txt (for section 2)   all tools to do homework 4

7.   Som-v2 virtual machine  (executable)   som.exe     Read about Som virtual machine    

Prabhas Chongstitvatana
contact address:   prabhas at chula dot ac dot th     
office   room 18-13  Engineering Building 4, floor 18.  tel 02-2186982
research lab:  Intelligent Systems,  floor 20.

Last update  14 Sept 2009