Introduction to Programming Languages

Introduction to Programming Languages

 * Preface
 * Programming Language Paradigms

Syntax

 * Grammars
 * Parsing
 * Ambiguity
 * Precedence and Associativity

Grammars in Practice

 * Logic Grammars
 * Syntax Directed Interpretation
 * Syntax Directed Translation
 * Syntax Directed Type Checking
 * A recipe for writing a reusable grammar

Execution Environments

 * Compiled Programs
 * Interpreted Programs
 * Binding

Functional Programming in Haskell

 * Concepts of Functional Languages

Types

 * Data Types
 * Primitive Types
 * Constructed Types

Typing Disciplines

 * Dynamically vs Statically Typed Languages
 * Nominal vs Structural Typing Equivalence
 * Safe vs Unsafe Typing
 * Type Inference vs Type Annotations

Polymorphism

 * What is Polymorphism
 * Ad-Hoc Polymorphism
 * Universal Polymorphism
 * Overloading
 * Coercion
 * Parametric Polymorphism
 * Subtype Polymorphism

High-Order Functions

 * Definition and Examples
 * Closures
 * Partial Application
 * Noticeable High-Order Functions
 * Template Oriented Programming

Scope

 * Definitions and Types of Scope
 * Scoping with Blocks
 * Scoping with Namespaces

Functional Data Structures

 * Algebraic Data Types
 * Functional Data Structures

Memory Management

 * Types of Storage
 * Static Memory
 * Stack
 * Heap
 * Garbage Collection

Parameter Passing

 * Parameter Matching
 * Evaluation Strategies

Cost Models

 * Introduction
 * Lists
 * Tail Call Optimization
 * Unification
 * Arrays

Math in Prolog

 * Simple Predicates
 * The Power of Exhaustive Search

Semantics

 * Quest for Meaning
 * An Interpreter for ML