CS 375: Lecture Notes


Copyright © 2006 by Gordon S. Novak Jr.

Permission is granted for individuals to make copies of these notes for personal use, or for instructors to make copies for classroom use.

Note: Many of these pages use math symbols such as: &forall &exist . Microsoft Internet Explorer will not display the math symbols, but Netscape or Firefox will.

Contents

absolute address 165, 174

absolute code 163

absolute file 165

abstract syntax tree 333

activation 196

activation record 196

address 249

alias 224

alignment 130

alist 334

ambiguity 22, 37

ambiguous grammar 61

annotate 267

antisymmetric 275

aop 326

architecture 302

arithmetic instructions 230

array 134

array performance 142

array reference 140, 239

aspect-oriented programming 326

assignment 197

assoc 334

association list 334

associativity 72

ast 333

atn 66

augmented transition network 66

automaton 40

available 283

available on entry 283

avl tree 115

babbage 295

backpatching 170

banked memory 167

base address 128

base register 164

basic block 273

behavior 303

binding 197, 261, 334

binding list 334

binding time analysis 267

bison 45

bit vector 277

block 273

boolean equations 283

bottom-up parsing 64

bounds check 149

bounds register 164

branch prediction 300

bss 165

bss storage 166

busy 285

byte code 206

cache 317

cache miss 300, 302

cache prefetch 300

call by name 249

call by reference 249

call by value 249

call overhead 195

car 332

cartesian product 275

cascading errors 31

cast 183

cdr 332

character class 17

chart parser 65

chomsky 33

chomsky hierarchy 40

church 328

class 303, 308

closed function 351

code generation 210

code generator 163

code motion 291

code reordering 302

color 287

common 178

compare 231

compile-time 259

compiler 9

compiler generator 268

computed 281

concatenation of languages 60

condition code 231, 300

conditional branch 237

cons 187, 332

constant folding 257

constant propagation 261

context free 34, 56, 57

context sensitive 58

control flow analysis 272

control stack 196

copying collector 190

correctness 253

cross-cutting 326

data area 128

data flow 11

data flow analysis 272, 282

dead code 296

def-use chain 286

defined 281

definition-use chain 286

delay 231

derivation 57, 59

derivative 296

difference engine 295

disambiguating rules 61

dll 179

dominator 279

dot matching 345

dynamic 147, 261, 267

dynamic data 261

dynamically linked library 179

efficiency 317, 317

empty string 38

encapsulation 307, 322

environment 197

epilogue 194

equivalence 275

equivalent grammars 60

errors 31

exported symbol 173

expression 211

expression generation 212

external reference 173

finite differencing 294

flex 45

float 232

floating point 28, 29, 30, 232

folding 257

forward branch 170

frame pointer 227

function call 234

futamura projections 268

garbage 186

garbage collection 186, 190, 329

genarith 214

genc 210

generation 35

generic 323

getchar 12

global optimization 255, 288

grammar 34, 39

grammar notation 38

graph 275, 276

graph coloring 286, 287

hardware 299

hash function 117

hash table 116

hash with buckets 118

heap 183

heuristic 287

hiding 306

hierarchy 303

identifier lookup 125

if statement 237

imported symbol 173

in-line 251, 317

induction variable 293

information hiding 306

inheritance 303, 314, 322

initialize 166, 183

inline 251

inline function 351

inlining 351

instance 303, 308

instance variable 308

interaction 329

interface 306

intermediate code 56, 154

interpretation 261

interpreted code 206

interpreter 330

interval 280, 284

intrinsic function 233

invariant code 291

jigsaw-puzzle modularity 325

just in time 317

killed 281

kleene closure 38

lambda calculus 328

language generated 60

language translation 343

layer 323

leader 274

left recursion 82

left-associative 72

leftmost derivation 59

leverage 252

lex 45, 46, 50

lexer output 27

lexical analyzer 13, 16

lexical scoping 119

library 173

lifetime 196

line handler 12

link editor 171, 176

lisp 187, 327, 333

lisp interpreter 330

list 332

loader 164

local optimization 255

location counter 168, 177

loop header 279

loop transformation 291

loop unrolling 259

looping statements 110

machine language 6

macro 250

malloc 183

mark-and-sweep 188

matching 340

matrix 292

mccarthy 328

memoization 298

memory management 183

message 304, 309, 313

method 308, 309

method lookup 314

mix 261

mnemonic 7

modulo unrolling 259

multi-processor 292

multiple inheritance 316

name equivalence 150

nan 166

nonterminal 34

number conversion 25

obfuscation 352

object 308

object-oriented programming 303

offline 267

offset 128, 177

online 267

oop 152, 303

opacity 323

open 251

open function 351

operator precedence 71, 72, 73, 79

optimization 252, 323, 343

out-of-order 300

overhead 323

overloading 152

padding 130

parameter passing 249

parser 56, 62

parsing 36, 109

partial evaluation 260, 261, 317

partial order 275

partition 275

pattern matching 340

pattern-pair 342

peekchar 12, 12

peephole 155

peephole optimization 258

performance 149, 246, 292, 299

pointer 145, 242

pointer arithmetic 183

pointer reference 145

polish 157

polymorphic 152

polymorphism 152, 322

postamble 194

powerpc 300

preamble 194

precedence 72

precompute 261

pretty-printer 78

processor stall 302

productions 34

program analysis 272

prologue 194

prove 253

quadruple 155

quote 332

read-eval-print loop 330

record 132

record reference 139

recursion 329

recursive 57

recursive descent 82

reduce 71

reducing 261

reduction in strength 256

reference counting 191

referenced 281

reflexive 275

register allocation 216, 286, 287

register architecture 227

register management 215

register reuse 218

register window 235, 301

regular expressions 46

regular language 43

relation 275

release storage 184

relocatable 172

relocatable code 163

relocate 177

relocation bit 177

representation 329

reserved word 22

restore registers 194

retarget 154

return address 194

return statement 194

reverse polish 157

rewrite rule 348

right-associative 72

rightmost derivation 59

row-major order 141

rpn 157

run-time 259

run-time library 180

save registers 194

scheme 328

scope 119

search 314

selector 309, 314

self 313, 317

semantics 15, 69

send 304, 309, 313

separate compilation 151

set 297

shadowing 121, 314

shift 71, 241

shift-reduce parser 85

side-effect 323

signature 151

simula 303

simulation 303

smalltalk 318, 319

snan 166

sound 149

space 252

sparc 301

sparc processor 226

specialize 261, 317

speculative execution 300

speedup 292

spill code 287

stack 57, 196

stack frame 196

stack machine 160

stack pointer 227

stall 302

start address 164

start symbol 39

state 197

static 148, 261, 267

static data 261

storage alignment 130

storage allocation 129, 174

storage leak 184

storage management 184

store-multiple 300

strength reduction 256

strip mining 292

strong typing 149

structural equivalence 150

structure example 143

structure reference 137

subclass 308

subgraph 280

sublis 335

subscripts 81

subst 335, 336

substitution 249, 335, 337

super 308

superclass 308

superscalar 300

switch 243

symbol table 111, 131

symbolic 327

symbols 123

symmetric 275

syntax 22, 33

synthesized translation 88

table lookup 237, 246, 317

terminal 34

thinglab 321

this 313

three-address code 155

time 252

token 13, 23, 24

top-down filtering 63

top-down parser 63

transform 261, 268, 291, 342

transformation 327, 343, 352

transitive 275

tree form 78

triad 156

triple 156

type checking 136, 147, 148

type coercion 136

type constructor 146

type equivalence 150

type inference 136

type safety 183

type signature 151

types as trees 146

unary 81

undefined symbol 173

unfolding 261

union of languages 60

unrolling 259

use number 219

used 216, 281

var 249

variable declaration 126

variant record 149

volatile 235

white space 19

yacc 89

yacc code 127

yacc grammar 93

yacc hints 99


CS 375