CS 5314: Concepts of Programming Languages
Spring 2016

Dr. Barbara G. Ryder
Email: ryder 'at' cs dot vt dot edu

Lecture Notes

Study Homework assignments

Programming assignments



April 26, 2016 The Python project due date and time have been delayed until Friday April 29th 11:59pm .

April 25, 2016 The student course evaluation surveys (the SPOT surveys) for this semester are now available online. Please visit this website to fill in a survey. The department is judged by how many of the possible SPOT surveys are submitted, so please cooperate with this effort. Thanks.

New study homework was posted today about lambda calculus and virtual function overloading. Answers will be available late next week (around May 4th). Do not examine the answers until you try the problems!

April 10, 2016 New study homework posted; answers to follow around April 20th to give you time to finish the Scheme project first.

April 3, 2016, 9:08pm Updated test data (for test case 7) for Team_scoring_list is now available on the Programming assingments webpage.

Apri 3, 2016 Please see the Programming assignments webpage for the Scheme project test data. The test data cases are posted on the class website and this will be the only place they will be posted.

March 22, 2016 IMPORTANT: the foldl and foldr functions in our DrRacket system are not quite the same as the ones in my class notes on functional programming. The difference is in the ORDER of the parameters given to these functions. The foldrr and foldll functions which I posted with the March 21st lectures notes are correct, but they do not exactly correspond to the built-ins in DrRacket, because of this change in the parameter ordering. For example, in DrRacket we have the following structure for applying the built-in foldr: (foldr op id ys) where ys is a list, whereas for my notes foldrr function, I used the following parameter ordering: (foldrr op ys id). Note that the functionality of these functions are the same -- it's just the parameter order that is different. Please be careful when referring to the already posted class notes, because I did not change the foldr and foldl in them into foldrr and foldll, respectively.

Please see a newly posted study homework assignment in Scheme to give you practice with the DrRacket environment. As usual the answers will be posted in ~2 weeks.

Please notice that the histograms for the midterm and the Prolog assignment are now available in piazza.com. I will be returning the midterms in class tomorrow.

March 15, 2016 Click here to see examples of parsing with epsilon productions in SLR(1) and LR(1) -- a question from yesterday's office hours.

March 13, 2016 First, HW2 has been posted since March 2nd, but from looking at the files today, it seems that the UNIX file permissions on HW2 may have been set incorrectly, so it is not clear whether or not students have had access to it. I am surprised no one asked me about this problem. Now both the HW2 statement and its answers are available from the Study Homework page.

With regard to posted answer for the study homework posted on January 31st: Note on page 1 of this answer there is a typo in the statement of question (i) (which was about an SLR(1) grammar)) and also a typo in the statement about building the parser states, which clearly are SLR(1) states... not LL(1) states. My bad.

March 2, 2016

February 22, 2016 Please see updated Prolog programming assignment page for UPDATED DEFINITION of the PROJECT and NEW DUE DATES

February 21, 2016 Important announcement about Prolog programming assignment:

The first phase of the Prolog assignment due later this week now will EXCLUDE string variables and literals. You still can type check illegal combinations of bools, ints, and floats... so the assignment scaffolding remains the same -- -it's just we will omit string data for now, until the GTA can make strings pass reliably through the tokenizer and be recognized as string....

February 17, 2016 Dr. Ryder will be available in her office (KWII, Room 2210) for makeup office hours on Thursday, Feb 18th from 4:30-5:30pm. Because of the Career Fair on Monday, Feb 22nd, there will be NO CLASS on Monday, Feb 22nd. Class will meet with a substitute instructor on Weds, Feb 24th, at the usual time and place.

The Prolog programming assignment grammar, available from the assignment description page, is now FIXED for 2 problems: (i) changing not equals to <> to avoid problems with SWI-Prolog and (ii) switching the definitions of op1 and op2 (which were reversed precedence as they appear in the Warren paper -- sorry)

February 9, 2016 Dr. Ryder will be on travel over the next few weeks: Feb 11-15th, Feb 22-24th with email available intermittently. There wil be no office hours on Feb 23rd. Class will be held on Feb 15th and Feb 22nd with a substitute lecturer, but NOT on Feb 24th. During this time Hasan will be available on piazza for questions about the Prolog programming assignment which will be posted by Feb 10th.

Study homework answers will be posted by the end of this week. Make sure to do the problems BEFORE you peek at the answers.

February 3, 2016 For those who want to view the online supplemental materials that come with the 4th edition of the book, the website name in the book forward is WRONG. This is the correct website.
Some Prolog books were requested for class reserve at the Newman Library yesterday; the first few chapters of these books (Clocksin and Mellish, Programming in Prolog; Jean Rogers, A Prolog Primer) are a good alternative introduction.

February 2, 2016 A correction for the in-class SLR example is available from the lecture notes page.

January 31, 2016. Dr. Ryder's office hours will be on Tuesdays from 4:30pm-6:00pm in KnowledgeWorks II room 2210. Please look again at the lecture notes for Formal-3 which we will finish up on Feb 1st, as I added a page to describe the algorithm for calculating Follow sets (page 16 in notes). An additional study homework problem has been posted for LR(1) parsing. Each student enrolled in CS5314 should receive an invitation to join the class Piazza site.

January 28, 2016. The class website has been rearranged so that the top-level page mostly has announcements. Please read the new Syllabus page as it has important information about allowed collaboration on the assignments.

January 26, 2016. Henceforth, class will meet in KWII room 1110 from 4:15pm-5:30pm (note change in time and place.)

Differences between textbook editions 3 and 4 The forward of edition 4 talks about the main differences between editions including: dividing the Types chapter into 2 chapters (4th edition) and adding in OCaml as a functional programming language. The author also talks about various changes to the implementation chapters which are less of a concern to our course. In addition, he added examples from more modern PLs rather than using older ones; these changes are embedded throughout the text. All study homework problems will be written out rather than assigned by number in the text.

January 13, 2016: Student background survey If you intend to take this course please visit the student background survey and use your VT PID to access and fill it out. Please do this as soon as possible, no later than the noon on Thursday, January 21st, 2016.

Course Summary

This course is intended to introduce you to the principles of programming languages, that is, those properties or characteristics that identify a programming language as an example of the procedural, object-oriented, functional, or logic paradigm -- or as multiple-paradigm. Our goal is not to gain expertise with a particular language, but rather to understand the intrinsic differences between these paradigms and the design choices made when a new programming language is created. The ultimate goal is to make it easier for a student to learn a new language, a common experience for computer professionals.

The course will present the key aspects of logic programming in Prolog, functional programming in Scheme, and scripting languages probably using JavaScript or Python. Topics will be chosen from among the following: introduction to formal languages and automata, top-down parsing techniques, types and type systems, polymorphism and type reconstruction, lambda calculus (i.e., the formalism behind functional programming), data abstraction and its specification, models of inheritance and delegation, and conurrency. Emphasis will be on learning these topics in the context of the specific programming language paradigms mentioned above.

The prerequisites include undergraduate courses in (i) data structures and algorithms, and (ii) programming languages or compilers. It is assumed that students are familiar with an object-oriented programming language such as C++ or Java. Permission of the instructor is required if you are not a Computer Science student or if you are a CS student without these prerequisites.

For more details on expected work, grading, resources, scheduled tests, please see the class Syllabus.

Contact Info
Dr. Barbara G. Ryder
Email: ryder 'at' cs dot vt dot edu
Phone: 540-231-2164
Office: Department of Computer Sceince, Virginia Tech
2202 Kraft Drive, Room 2210 (KnowledgeWorks building in the CRC)
Blacksburg, VA 24060
Office Hours: Tuesdays, 4:30pm-6pm, KWII room 2210(or by appointment)
Preferred mode of contact: email

Md Hasanuzzaman (Hasan) Bhuiyan
part-time GTA for course
Email: mhb 'at' vt 'dot' .edu
Office: NDSSL: Network Dynamics and Simulation Science Lab
1880 Pratt Drive, Suite 2000-17 (in CRC)
Blacksburg, VA 24060
Office Hours: Thursdays 1:00-2:30pm at NDSSL address given above
Preferred mode of contact: email

last changed 10:08am April 26, 2016 BGR.