- Home
- Colophon
- Preface
- Acknowledgements
- Contents
- 1 Computer Arithmetic
- 1.1 Positional Notation
- 1.2 Binary Numbers
- 1.3 Addition and Subtraction
- 1.4 The Integers
- 1.5 Shifts
- 1.6 Summary
- 2 Machine Code
- 2.1 The von-Neumann Architecture
- 2.2 The RV32I ISA
- 2.3 The Assembler
- 2.4 Execution Traces
- 2.5 The Data Segment
- 2.6 Memory Segmentation
- 2.7 Linking
- 2.8 Calling Functions
- 3 Some Simple Algorithms
- 3.1 Number Conversion
- 3.2 The Sieve of Eratosthenes
- 3.3 Insertion Sort
- 3.4 Evaluating Polynomials with Horner’s Method
- 3.5 The Tortoise and the Hare
- 4 Introduction to C
- 4.1 Basics
- 4.2 Execution Traces
- 4.3 Imperative Variables
- 4.4 The C Memory Model
- 4.5 Translation Units
- 4.6 Number Types
- 4.7 Control Flow
- 4.8 Expressions
- 4.9 Calling Functions
- 4.10 Pointers
- 4.11 Examples
- 4.12 Dynamic Memory Management
- 4.13 Structs
- 4.14 Input and Output
- 4.15 Undefined Behavior
- 5 Algorithms and Data Structures
- 5.1 Lists
- 5.2 Trees
- 5.3 Hashing
- 5.4 Dynamic Programming
- 6 Formal Semantics
- 6.1 The Syntax of Programming Languages
- 6.2 The Abstract Syntax of C0
- 6.3 The Semantics of C0
- 6.4 Pointers (C0p)
- 6.5 Scopes (C0b)
- 6.6 A Simple Type System (C0t)
- 6.7 Summary and Further Reading
- 7 Testing and Verification
- 7.1 Functional Correctness
- 7.2 Failures
- 7.3 Testing
- 7.4 Verification
- 8 Object-Oriented Programming with Java
- 8.1 Compilation, Main Method, Packages
- 8.2 Types
- 8.3 Reference Types
- 8.4 Classes
- 8.5 Encapsulation
- 8.6 References, Aliasing, and Immutable Objects
- 8.7 Inheritance
- 8.8 Overloading Methods
- 8.9 The Java Collections Framework
- 8.10 Using Object Orientation Properly
- 8.11 The Expression Problem and the Visitor Pattern
- 8.12 Object-Oriented Programming with C
- 9 A Simple Compiler
- 9.1 A Brief Overview of Syntactic Analysis
- 9.2 Type Checking
- 9.3 Syntax-Directed Code Generation
- A RISC-V Assembler Reference
- A.1 Instruction Set Reference
- A.2 OS Calls
- A.3 Assembler Directives
- B ASCII Table
- C Course Structure
- C.1 I: Course Introduction
- C.2 R1: Computer Arithmetic
- C.3 R2: Computer Arithmetic
- C.4 M1: Introduction to Machine Code Programming
- C.5 M2: Simple Algorithms in Machine Code
- C.6 M3: Function Calls
- C.7 C1: Introduction to C
- C.8 C2: Expressions and Pointers
- C.9 C3: Arrays, Structs, I/O
- C.10 A1: Lists and Trees
- C.11 A2: Dynamic Programming
- C.12 S1: C0 Syntax and Semantics
- C.13 S2: Extending C0 to Pointers and Scopes
- C.14 S3: Correctness
- C.15 S4: Testing
- C.16 J1: Intro to Java
- C.17 J2: Immutable Objects, Interfaces, Subtyping
- C.18 J3: Abstract Classes,
Object, Overriding and Overloading Methods
- C.19 J4: Using OO Properly, OO in C, The Expression Problem, Visitor Pattern
- C.20 A3: Java Collections Framework and Hashing
- C.21 A4: Project Specific
- C.22 O1: Compiler Introduction (Syntax Analysis, Static Semantics)
- C.23 O2: Type Checking Examples, Implementation of Type Checking
- C.24 O3: Syntax-Directed Code Generation
- C.25 V1: Hoare Logics
- C.26 V2: Loop Invariants and Mechanizing Verification
- Exercise Solutions
- List of Symbols
- Index
- Literature