CMSC 208: Grammars, Languages, and Automata
 (Spring 2017)
(as of January 15, 2017)

Instructor: Scott McElfresh (pronounced  mac' - el- fresh)
Ruffner 346     Phone:  x2249
Email:   ProfScottMcElfresh @ (checked more frequently) or  mcelfreshsa @
Office Hours: 
- MWF 9:30-10:30am
- Th 2-3:30pm
- or when I am in my office with the door open
- or by appointment
Other times may be announced in class or on the website.

Course Web Page:  Most of the handouts in this course will be available through this World Wide Web address.   

Canvas will be used for submission of some assignments and recording of grades on individual assessments.   NOTE:  Canvas does not always calculate course grades correctly.  The relative weights are in this syllabus.

Course Description:   
 The basic theories underlying computer science, including the development of theoretical machine and language descriptions.
From the  Catalog:
"This introduces topics in theoretical computer science including formal languages, grammars, and computability, which form the basis for analysis of programs and computation. These tools are then used to explore several modern programming languages and survey the major programming paradigms. Prerequisite: CMSC 162, MATH 175. 3 credits."

Course objectives:
At the end of the course, a successful student will be able to:

Textbooks: There is one required textbook for the course.

Class Participation and Preparedness:  
A portion of the grade is allocated to your participation in class and your preparedness for the class period.   Preparedness involves having done assigned readings and made effort on assigned problems.
Participation includes attendance, participation in group discussions, and presenting your efforts and ideas to your peers.
    This class will have a variety of graded assignments, including reading assignments, written exercises, and programming exercises.   Due to the varying nature, some graded work will be worth more than other work.     Each assignment will indicate the weight on the assignment.    Note that some assignments will not be "graded" but will be "checked".    See section above on Class Participation and Preparedness.
       Lateness:  Each exercise will give not only a due date, but a due time.  Some exercises may be gone over in class, so you will need permission to hand in asisgnments late.  If I agree to accept an assignment late, there may be a 50% penalty.
      Collaboration:  Unless otherwise specified, all work is assumed to be your own.   You are encouraged to discuss the exercises with other students, but you must write up your own solutions. When using a calculator or computer, you are expected to type everything in yourself.  When you consult with other students, you must indicate this on your submission - by including a note at the top or bottom indicating with whom you consulted and a description of the level of consultation.
              When doing computer programming, you will often be utilizing someone else's ideas or code and modifying them to be your own.  In this case, you must fully document this in the program comments as well as any other documentation.  For some guidelines, see the Academic Honesty in Computer Programming handout.

There will be quizzes throughout the semester.   These will typically take the form of short (5-15 minutes) sets of questions.  There will be no make-up quizzes given.    If more than 5 quizzes are given, the lowest two quiz scores for each student will not be calculated into the course grade.

There will be in-class exams given on the following dates:  

There will be no makeup exams given without proper medical documentation.

Final Exam: 
There will be a comprehensive written exam.   More details on this will be announced as the time approaches. 

The relative weight of each item in determining your course grade will be as follows:
Prep and Participation:   10%
  Exercises: 45%

Quizzes: 10%

In-class exam 1: 10%
In-class exam 2: 10%

Final Exam: 15%
Course Grades will be assigned as follows: 
Course percentage   Course Grade
90 - 100
A-, A
80 - 89.9
B-, B, B+
70 - 79.9
C-, C, C+
60 - 69.9
D-, D, D+
 0  - 59.9 
+'s will be assigned in the top 2 percentange points of the range.
-'s will be assigned in the bottom 3 percentange points of the range.

Academic Honesty:     
Longwood University is an academic community that subscribes to an honor system.   By accepting membership in this community, we all assume the obligation to be trustworthy in all pursuits.  Violations may receive grade penalties in the course and be referred to the Honor Board, which may impose additional penalties.

Tentative Topic outline:

Week Dates Topics
1 Jan 18 - 20 Introduction; Languages as syntax; grammars; Logic review; Sets
2 Jan 23 - 27 Proofs, Functions, relations
3 Jan 30 - Feb 3 Induction; Recursion
4 Feb 6 - 10 Languages as sets; Automata
5 Feb 13 - 17 Accepting languages; Regular Expressions
6 Feb 20 - 24 Non-determinism; Tokenizing; Exam
7 Feb 27 - Mar 3 Pumping Lemma
8 Mar 13 - 17 Context Free Grammars; Parse Trees
9 Mar 20 - 24 Parsing' Relating syntax to semantics
10 Mar 27 - 31 Language translation; code generation
11 Apr 3 - Apr 7 Decidability; Turing Machines
12 Apr 10 - 14 Turing Machines; Exam
13 Apr 17 - 21 NP
14 Apr 24 - 28
and May 1
May 5 Final Exam

A detailed day by day calendar will be kept up-to-date on the course website.