CS 3723 Programming Languages


Syllabus, Spring 2000

Instructor: Dr. Neal R. Wagner
Office: 3.02.16 SB
Phone: 458-5550
Email: wagner@cs.utsa.edu
Office Hours: (To be determined)
and by appointment
Time and Place: MW 3:30-4:45 pm in 3.01.08 BB

Prerequisite:
CS 3233 and CS 3323
Note: The prerequisite of CS 3323 (Topics in Programming Languages) is out of date; CS 3323 is no longer required for a CS major. Instead, this current course, CS 3723, will be required in the future. Because of other changes to our curriculum (in particular, because of our decision to introduce programming with the Java language), we will probably not offer CS 3323 very often.

Course Content:
From the UTSA Undergraduate Catalog: An introduction to the organization of high-level programming languages, including data types, control structures, data flow, and run time environments. Use of formal syntax descriptions. The implications of interpretation versus compilation. Activation records and dynamic storage in block structured languages.

The Spring 2000 semester is a special case because many (or most) students in CS 3723 will have taken the CS 3323 course. The CS 3323 course has covered some of the elementary material from a standard CS 3723 course. For this reason, I plan to teach CS 3723 in a different way from the way that I anticipate it will be taught in subsequent semesters. In particular, there will be more emphasis on compiler topics and there will be a programming project related to compilers.

Course Goals and Objectives: (See Goals and Objectives.).)

One good way to study programming languages is to study how they are processed by the compiler. This course will start with an assignment helping distinguish a compiler from an interpreter. Then programming assignments will continue working on a compiler for a simple input language. This course is not designed to turn you into a professional compiler writer. (Current industry supports very few compiler people.) Instead I want you to get a good idea of how a compiler works, so that you can be a better programmer. Compiler techniques are useful in many areas. A secondary objective is to produce a useful student-oriented compiler for a subset of the C language.

From one point of view, the course has only one goal and one central idea: that of syntax-directed translation. This is a type of non-procedural programming, and we will be talking at length about what the phrase means. In brief, however, non-procedural programming does not write a sequence of functions to be called in order to process data, but instead it arranges things so that the proper functions will be automatically called according to the particular input data. You may have seen non-procedural programming in other contexts, as in artifical intelligence applications, where the non-procedural prolog language provides a set of rules to be applied to an application. The language processor arranges to apply the proper rules in a given situation. As another example, in database applications the SQL language often states the desired result of a query, without saying how that result should be achieved.

Grading: (See Grading Policy.)

Assignments are due at the start of class on the due date, always a Wednesday. There will be a 10% penalty for late programs turned in before the weekend, and a 25% penalty for programs turned in on Monday, after the weekend. Programs will not be accepted after the Monday following the Wednesday deadline. (Thus programs must be turned in no later than the following class period.)

Scholastic Dishonesty: (See Dishonesty Policy.)
From the UTSA Undergraduate Catalog: The integrity of a university degree depends on the integrity of the work done for that degree by each student. The University expects a student to maintain a high standard of individual honor in his/her scholastic work.

In practice, for this course, you may discuss assignments in general terms, but you are not allowed to share details of actual algorithms or of program code. You may help someone else debug their program as long as you do not start substituting in your own code when there are problems. Turning in a copy of someone else's program, even a copy with extensive changes made to it, is a very serious offense in this course. It is also unacceptable to make a copy of your own program available to another student.

New policies for this course require that all students e-mail a concatenated file of the code for all their programming assignments to the instructor. Students must also identify any outside sources for their programs and identify any collaborators.

No Team Programming:

For this course team programming is not allowed. As detailed above, however, you may discuss the assignments and even help each other with debugging. If you use code that you have not written entirely yourself, you must identify the code used and the source. Except that you may not get full credit, there is no penalty for using identified code from other sources. (See Dishonesty Policy.) The course project has 6 parts, aiming to produce a single final program. In case you have trouble with one part, you should hand in your best effort for partial credit. Then for later parts you may use someone else's earlier program for the previous parts, with no penalty (but the borrowed code must be identified, as mentioned above).

General:
Friday, March 24, 2000, is the last day to drop this course. In general I don't give makeup exams, but just count the other course elements for greater credit.

Attendance in class is required in the sense that 10% of your grade depends on attendance. (See Grading Policy.) However, if you have to miss a class, I would like for you to find out from others what happened in the class.

The class web page is:

http://www.cs.utsa.edu/~wagner/CS3723/spr00/index.html.
You should put a netscape bookmark at that page for easy access. Class information and assignments will be posted on that page. You are responsible for reading the web page.


Revision Date: 12/23/99