CSC 533: Organization of Programming Languages
Fall 2003
Test 1 Review
Overview and History
programming paradigms: imperative vs. declarative
machine language--> assembly language--> high-level languages
language translation: compiled vs. interpreted
evaluation criteria: readability, writability, reliability, ...
key languages: FORTRAN, LISP, ALGOL, C, C++, Java
Syntax and Semantics
syntax
BNF (EBNF) grammar, derivation, parse tree, ambiguity
building precedence & associativity into grammar rules
parsing: top-down vs. bottom-up
semantics
operational, axiomatic, denotational
Variables and Bindings
variable attributes
name: keyword vs. reserved word, naming conventions
type: static (explicit or implicit) vs. dynamic binding
type checking, coercion
address: static vs. stack-dynamic vs. heap-dynamic (implicit or explicit)
value: l-value vs. r-value
scope & lifetime: static vs. dynamic scoping
Data Types
primitive data types
integer, floating-point (decimal, fixed-point, rational, ...)
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