STUDY GUIDE – TEST 1 – CS 424/524
Read the book, review the slides and your notes; study your homework, and review the topics
listed below. The purpose of the study guide is to point out some of the important things that you
should understand. It isn’t necessarily all inclusive.
Chapter 1
 Binding: know what it means, possible binding times, things that might be bound, relative
advantages of early and late bindings.
 Orthogonality: definition, example; other programming language characteristics that
promote or detract from readability and writeability.
 Compiler versus interpreter. Advantages and disadvantages of each kind of language
implementation. Understand a little about the virtual machine approach, as in the Java
Virtual Machine.
Chapter 2
 Define syntax. Know the difference between lexical, concrete, and abstract syntax. Be
able to identify the four components of a context-free grammar (page 25) and know the
basics notation of BNF notation (the most common notation for defining context-free
grammars). Understand the difference between EBNF and BNF; understand the
notations of both.
 Understand the definitions of operator precedence and associativity (page 30). Be able to
look at a concrete grammar and determine the precedence and associativity of its
 Ambiguity in a grammar: definition and recognition
 Figure 2.8: Major stages in compilation. Understand the steps, be able to describe, be
able to identify actions that occur at various stage. Know the input and output of each
stage also.
 Understand the abstract grammar representation of Clite given in our textbook. For
example, what is the format of a binary or unary?
 Be able to generate or interpret concrete and abstract syntax trees when given the
concrete and abstract grammars.
Chapter 3
 Be able to identify the Chomsky Hierarchy of grammars and know which two grammars
pertain to programming languages (page 58).
 Know what a token is. What are the various classes of tokens that are generally found in
programming languages?
 Regular expressions as an equivalent to regular grammars: given the notation for regular
expressions, be able to write or interpret one if given a description.
 Definition of a deterministic finite state automaton
 Be able to draw a DFSA when given the regexp it represents, or when given a DFSA, be
able to tell whether or not it recognizes a given string.
 Know what a parser does, and understand the basic difference between top-down and
bottom-up parsing.
 Know some basic facts about the recursive descent expression parser in the book: for
example, it is designed to return binaries that contain the intermediate code for that
expression; it is based on EBNF notation rather than BNF to avoid recursive function
calls; it calls the lexical analyzer for a new token whenever it needs one, etc.
Chapter 12 : Imperative Paradigm
 What are the distinguishing characteristics/features of imperative programming
 What was the relation between the von Neumann computer architecture and the
development of early programming languages
 What is a Turing complete language?
 Terminology: Be able to define procedural abstraction and data abstraction;be able to
identify structured programming and top-down design.
 What is the role of the assignment statement in imperative languages?
Drawbacks of imperative approach – why did developers extend it to also include objectoriented concepts?
Chapter 13: Object-Oriented Paradigm
 Definitions: Encapsulation, information hiding, inheritance,
 Be able to compare/contrast imperative paradigm and OO paradigm with respect to
software design process.
 OO terminology: class, object, message, client, constructors, visibility, etc. Be able to
identify the terms; be able to define class, object, and constructor.
 The three characteristics of an object-oriented language
 Know the difference between “pure” or “run-time” polymorphism (virtual
functions/methods) and parametric polymorphism (as in templates or generic
 Abstract classes and abstract methods; difference between abstract methods and virtual
Python and Scripting Languages:
 Define, give characteristics of scripting languages; compare to more traditional languages
for usability, etc.
 Dynamic typing in Python
 Basic Python syntax; e.g., use of white space to delimit program blocks; multiple
assignment statements, multiple return values for functions
 How is a variable “declared”?
 Be prepared to write a few lines of code or tell the meaning of a few lines of code.
 Know the difference between a list and a tuple (e.g., which structure supports element
 Be able to create and populate a dictionary directly (without using functions); know how
to access dictionary entries via a key.
 Understand the difference between dictionaries and sequential structures such as strings,
lists, and tuples. In particular understand why there are different types of data structures,
what the differences are in terms of insertions and lookups, etc.
 Know the difference between a dictionary key and an index (which indicates the position
of some item in a sequence)
 Understand lists, list access using indexes, simple operations such as concatenation,
repetition (“multiplication”), etc.
 Use of the range statement in for-loops