   by Tim Menzies

   LCSEE, WVU, Spring 2011

   Copyright © 2011.  All rights reserved.  This work is licensed
under a Creative Commons Attribution-Noncommercial-No Derivative Works
Version 3.0 United States License.

Top
***

1 Syllabus
**********

   * Course name: CS310, Principles of Programming Languages

   * Effective data of syllabus: Jan 11, 2011

   * Site: LCSEE, WVU

   * Course number: 10961

   * Pre-requisite: successful completion of CS 111, Data Structures

   * Course format: 3 credit hours 3 hr lectures, exams, weekly homework

   * Textbook:
        -  Michael L. Scott, Programming Language Pragmatics (3rd
          edition) `http://goo.gl/Vzku5'.

        - Paul Graham, ANSI Common LISP `http://goo.gl/lDSVp'.

   * Schedule : Tuesday, Thursday, 1530-1645

   * Location : ESB G39

   * Instructor name: Tim Menzies Ph.D. ESB 841a, tim@menzies.us.
     Note: use this  for private messages.   For most of the class
     traffic, use the class discussion list
     (https://groups.google.com/group/cs310/topics?hl=en)

   * Consultation times : Tuesday, Thursday 1645 to 1745 or by
     appointment

Objectives
==========

Overview of different paradigms of programming languages.  Detailed
studies in  object-oriented, functional, and logic programming.
Theoretical aspects of programming languages including basic language
translation, virtual machines, abstraction mechanisms, declarations and
types.

Topics
======

   * Week 1: Overview (see 1, a)

   * Week 2: Grammars (see 1, a)

   * Week 3,4: Functional programming  (see 2, a,
     b, c, k)

   * Week 5: Basic language translation (see 1, a,
     b)

   * Week 6: Virtual machines (see 1, a, b)

   * Week 7: Abstraction Mechanisms (see 1, a)

   * Week 7,8,9:Object-oriented programming (see 1, a,
     b, c)

   * Week 10: Declarations and Types (see 1, a)

   * Week 11,12: Logic Programming (case studies with Prolog) (see
     a, b, c, k)

   * Week 13,14: special topics (see a, k)

   Note that all the case studies involve translating and executing a
high-level specification, written as a variant of an attributed EBNF
grammar.  Hence, they all contribute to bc

   ACM curriculum:
   *  1 core

   *  2 elective A

   LCSEE computer science program objectives:
   *  a Be exposed to a variety of programming languages and systems,
     and will be proficient in programming in at least two languages.

   *  b Have the knowledge of the basic principles and methods of
     programming language translation.

   *  c Have knowledge of the basic principles of data structures,
     discrete mathematics and algorithms, and be able to apply this
     knowledge to problem solving in relevant application areas.

   *  k Be familiar with advanced concepts of several specialized
     computer science areas.

Expected Workload
=================

You MUST be prepared to dedicate AT LEAST 5-8 working hours a week to
this class (excluding the time spent in the classroom). A minimal
prerequisite for the successful completion is good understanding of
programming concepts. You should have gained these in the prerequisite
class, CS 111. Familiarity with a high level programming language is
assumed (as taught in CS 111). Laboratory instruction is not included in
CS 310. You will be given class accounts on CS Department machines and
all assignments will have to be submitted and run there. Please note
that a Linux server can be accessed from any PC using a secure
connection service, such as SSH (explanation to be provided in class).

   Assessment

   Mid-term: 10 marks Final exam: 30 marks Four projects, 15 marks each.
These projects will be called 1,2,3,4.  Each will have deliverables
a,b,c (each worth up to 5 marks, if delivered on time, and 2.5 marks if
delivered late).  For projects 3,4 there will also be a deliverable "d"
worth up to 5 bonus marks (10 marks in total). Students handing in "d"
can score 110% in this subject.  ALl students will commit their work to
an on-line repository, supplied by the lecturer.  Late marks: see point
(3), above.

   See also, below, for how to lose marks due to poor attendance or
lateness.

   For special consideration on the above, either:

   See me at start of semester advising planned absences or provide a
medical certificate indicating that the student was unable to work on
their studies for a relevant period that doctor's note must NOT name
the illness, but should list its duration Final marks:

   * A  =95; A =92; A- =90; B+ =86; B=83; B- =80; C+ =76; C=73; C- =70;
     D+ =66; D=63; D- =60; E+ =55; E=50; E- =45; otherwise F

   sores

2 Lecture notes
***************

2.1 What i the best programming language?
=========================================

inside

   See me90 and me90b.

2.2 Syntactic descriptions of languages
=======================================

inside

3 Student projects
******************

3.1 Groups
==========

Students will work in groups of three.

   1 : jlake8 rburris adolby

   2 : lmazza mchicoin jdelong

   3 : dparks2 jharpel jcraig6

   4 : ssimons1 porsinge acline3

   5 : dringer2 tmolina cmcgee1

   6 : adanie11 jyaworsk kcruse1

   7 : pprince mgrubb1 nbolyard

   8 : jsatter5 jingram3 tmille42

   9 : rmccorm8 plewis2 mcorum

   10 : jvaughn1 cgutshal pkirkpat

   11 : jsteve14 amorga25 agilber3

   12 : ckorb rmoneype jmckowen

   13 : sshanabe jbrenwal ssweene2

   14 : smatchet dbenne14 cpetrosk

   15 : lcorcuer alamb3 mgharee2

   16 : jbyrd7 barmstr2 rgross4

   17 : bokanyme nyanak kdavis10

   18 : dswisher jsteele9 pshahan

   19 : kphilyaw eiannell mcheeks1

   20 : khebert anoore1 jcanady1

   21 : thitrik ashepard mkobe

   22 : jbreyer jcoope30 dwilli40

   23 : swhite24 chinkle2 gchrist1

   24 : ccover cmetz7 rrush4

   25 : rrawling mphares2

   FYI: students were assigned to groups, at random, using this script:

cat names |
gawk '{N[rand()]=$0}
  END {for(i in N) print N}'

3.2 1a
======

1a

3.3 1b
======

1b

3.4 1c
======

1c

4 Bibliography
**************

4.1 A to F
==========

stuff

4.2 G to M
==========

stuff

   Menzies90

   Menzies90

4.3 N to T
==========

stuff

4.4 U to Z
==========

stuff