Midterm Exam Review
Programming Language Concepts

ICSS 4003-450

Fall Quarter 20062


Reading Coverage

 

Programming Language Pragmatics 2nd/Edition, Michael Scott

 

Chapter 1: Foundations

Chapter 2: Programming Language Syntax

Chapter 3: Names, Scopes, & Bindings

 

 

Major Topics

 

Programming Language Spectrum

Compilation and Interpretation

Lexical and Syntax Analysis

BNF / Context Free Grammars

Names, Scope & Bindings

Evaluation

Recursion

Lists

Control

Functions

 


Things to Know

 

What is the unique importance of Fortran I in the history of programming languages?

Understand the fundamental differences between the major classifications of languages.

Understand the compilation process and how it differs from interpretation.

Know how tokens in any language can be specified.

Understand how scanners extract tokens using regular expressions.

Understand how parsers use a context free grammar to construct parse trees.

Know the abstractions in a context free grammar

rules / productions

nonterminal symbols, nonterminals, terminal symbols, terminals

derivation, sentential form, yield

Understand how the syntax of a language is derived using a context free grammar.

Be able to recognize ambiguous grammars.

Be able to generate parse trees from a grammar.

Be able to verify the legality of a syntax against a corresponding grammar.

·        Scheme

Be able to read Scheme code and determine its output.  A language reference will be provided, if needed, for most operators outside of the basics.

Basic operators include:

all math operations,

car,

cons,

cdr,

define,

cond,

if,

append,

list,

null?

Understand how cons is used to build lists.

Be able to trace and/or write a simple recursive function.

Understand the notion of lambda functions.

·        Names, Scopes and Bindings

Understand the six major attributes of a variable.

Know the difference between an L-value and an R-value.

Understand the differences between the distinct binding times for a variable.

Static vs. Dynamic binding.

Explicit vs. Implicit type declaration.

Dynamic type binding.

Understand the concept of storage binding and lifetimes for variables.

Static Variables vs. Stack Variables vs Heap Variables.

Understand the concept of type checking, coercion and type errors.

Static vs. Dynamic scoping.