Architecture and Compilers
News Handouts Labs Resources References Old News

About the course

This is the homepage for CS 353: Architecture and Compilers, a course offered by Fritz Ruehr at the Computer Science Department of Willamette University.

Learning to program in Java or Python can be fun and empowering, but it may still leave you mystified about how computers really work: what are the components of a physical computer? How does the computer “know” what to do when it runs a program? What connects abstract ideas like objects and methods to the silicon hardware?

This hybrid course in computer architecture and high-level language processing (compilers) will provide you with the answers to these questions. The course is a “soup-to-nuts” overview of the various levels of structure embodied in a physical computer, as well as the various stages by which high-level languages are translated into a form which the computer can directly execute. In traditional curricula, these two topics are often covered in separate courses—we have combined them into a single comprehensive overview in order to expedite Willamette's pedagogical goals.

We will start our journey with basic facts about binary encodings, how they are used to represent data and how logical operations can be used to transform these data. We will then see how basic electrical components called gates can be used to realize these operations on digital signals, and how they can be combined into circuits which will implement more complex processes. Finally, we will see how these circuits are used to build higher-level components which constitute a typical computer, and how digital data stored inside the computer can be used to control its operation. In the second phase of our studies, we will start with the strings of characters which comprise a program file, and see how it can be analyzed in successive stages until the internal structure of the program is exposed. We will then see how this internal structure can be translated into the low-level codes which a computer can execute, in a way which respects the meanings of the original program. Finally, as time permits, we will survey a few important concepts which inform the design of high-level languages both like and unlike Java or Python.

News

Welcome to the Fall 2020 class!

As the semester progresses, new News items will be added to the top of this section, after the line below, so that the most recent ones appear first. You should thus get in the habit of coming to this page to check the top of the News for announcements, etc.

I have kept the old news items from earlier teachings of the course and the most recent one (Fall 2019) intact below, in a separate section, just in case we need them.

Note that previous versions of the course were taught for students who (mostly) knew and used only Java. This Fall 2020 version is the first to be taught to a mixed group of students, many of whom are mostly familiar with Python. I will make suitable adjustments to assignemnts and other documents as we go through the semester


Current work (study for the exam and work on all labs)

Study for the final exam (Dec 7 2020 from 2-5pm) using the new Fall 2020 Final Exam review notes.

Reading/study: review lectures on the PC-231 computer and the shunting-yard algorithm (see also the Wikipedia entry on shunting-yard).

Coding: work on Lab 3: Building circuits in a GUI or Lab 4: Hidden circuit simulator or Lab 5: Writing PC-231 Programs as listed in the Labs section below.

And, by the way, here is some quick sample code on how to organize your Python code for the Hidden Circuits lab.


Hereafter starts the old news part of the section …

CS 353 Handout Archive

This section of the homepage (inaugurated Spring 2017) will be a growing collection of handouts for the class, organized by topic, in chronological order. The files are, for the most part, in PDF format, which should be easily readable in a browser or with other tools if downloaded.

(Note: some, but not all, of these handouts are already linked from the course homepage, or from individual labs.)

Labs (in chron. order) NB: due dates may be updated as we go!

(I have added “abstract due dates” below for each of the labs. What does this mean? Well, first of all, they are stated in terms of the weeks of the semester rather than the days and months of any specific year (this mean less bother about updating for me, but requires you to be at least somewhat aware of how far into the semester we are “currently” if you wish to gague your own progress). But the due dates are also abstract in that they are a little vague and soft: you are not required to finish the lab by the expected date, but should expect to do so, or perhaps strive to do so. As stated in lecture, if you let these things go too long, you will have a Bad Time™ at the end of the semester.)

Some useful resources, etc.

Some information about C and other miscellanea

Current work archive

Remember to start studying for the midterm exam, scheduled for Friday 16 October; you can do so using the Fall 2020 midterm review notes, and check out this sample exam for the format and to test your software.

Reading/study: review lectures on the PC-231 computer and try the new homework assignment found here. Also, we will develop some code for a multiplier in class (see this older file for actual PC-231 code).

Coding: work on Lab 3: Building circuits in a GUI as listed in the Labs section below.

Current work (2nd week): review class notes and work on Lab 1

Reading: review your class notes on semiotics, digits and bases, and Horner’s technique (for the last, see the more detailed visual … document in the Handout archive below.

Coding: work on Lab 1: Numerals, numbers and strings as listed in the Labs section below. Don’t worry about making a GUI interface (unless you want to), but use the description’s white and grey boxes style to understand which items are inputs (white boxes) and which are outputs (grey boxes). This is not really due at any specific time—I also want to be able to gauge your coding level and style.

Topical references (in chron. order)

We won't be using a formal textbook this semester, so I will be trying to gather links to relevant on-line material. A lot of good-quality articles are available on Wikipedia, the free on-line "open source" encyclopedia (you might want to consider donating some portion of your textbook savings to their efforts).