CSC 533: Organization of Programming Languages
Fall 2000
Test 1 Review
Overview and History
machine language--> assembly language--> high-level languages
programming paradigms: imperative vs. declarative
language translation: compiled vs. interpreted
evaluation criteria: reliability, clarity/simplicity, orthogonality,
generality, speed, portability, ...
Syntax and Semantics
syntax
BNF (EBNF) grammar, derivation, parse tree, ambiguity
building precedence & associativity into grammar rules
semantics
operational, axiomatic, denotational
Variables and Bindings
variable attributes
name: keyword vs. reserved word
type: static (explicit or implicit) vs. dynamic binding
type checking, coercion
address: static vs. semi-dynamic vs. dynamic (implicit or explicit)
value: l-value vs. r-value
scope & lifetime: static vs. dynamic scoping
stack-based memory management
(store activation records, static & semi-dynamic variables)
static vs. dynamic links
Data Types
primitive data types
integer, floating-point (decimal, fixed-point, rational, complex)
boolean
character
pointer
used for indirect addressing, dynamic memory management
dangling reference, garbage reference
heap management: can allocate/deallocate in arbitrary order
fixed-size elements: allocate/deallocate from free list
variable-size elements: fragmentation, compaction
reclaiming storage: reference counts vs. garbage collection
complex data types
string
enumeration
subrange
array/vector
subscript types, subscript ranges, multi-dimensional,
allocation (static vs. fixed stack-dynamic
vs. stack-dynamic vs. heap-dynamic)
record/struct
field access, variant record/union