Exam 1 Topics
Exam Date: Thursday, 6 March, 7:00-9:00.
Language Evaluation, Categories, and Implementation (Chapter 1)
- Know and be able to use the language evaluation critera for readability,
writeability, and reliability discussed
in Sebesta and in class.
- Be able to discuss the cost tradeoffs involved in a
programming language
- Be able to describe and discuss the language categories.
- Know the different approaches to implementing PLs (compilers, pure interpreters,
hybrids), their differences, the steps used in each, and the tradeoffs between them.
Programming Languages (Chapter 2)
- Know the significance, features introduced, and limitations of the early
programming languages Fortran I, COBOL, and LISP.
- Understand and be able to describe the significance
and impact of ALGOL 60 and ALGOL 68.
- Know the ancestry of Java.
Syntax (Chapter 3)
- Understand and be able to "read" BNF and EBNF.
- Be able to do derivations and create parse trees from BNF
grammars.
- Understand what an ambiguous grammar is and how to fix it.
- Understand how to change grammar to make expressions left or
right associative and how to create precedence.
-
Scheme
- Be able to develop and create programming solutions in Scheme.
- Be able to create programs involving top-level recursion, deep recursion,
and tail-recursion (iterative).
- Be able to create abstractions over functions, i.e., functions that
return a function.
- Know how to use let and letrec constructs to create
local variables and local procedures.
- Be able to create functions that map procedures over arguments.
- Be able to manipulate lists as trees.
- Understand and be able to explain how local environments and closures work.
- Be able to write tail-recursive programs
Attribute Grammars (Chapter 3)
- Understand attribute grammars and their components (synthesized
attributes, inherited attributes, intrinsic attributes, semantic functions,
predicate functions).
- Be able to compute attribute values for a given attributed parse tree.
- Be able to create attribute grammars.
Syntax Analysis (Chapter 4)
- Know what Lexical analysis is and how it is implemented. Be
able to write a lexical analyzer
- Know what top-down and bottom-up parsers are and how they
differ.
- Be able to detect and fix left recursion and ambiguity problems
in a LL grammar.
- Be able to detect and fix pairwise disjointness.
- Be able to write a simple recursive-descent parser.