Introduction to Programming Languages

Table of contents edit

Introduction to Programming Languages edit

  Preface
  Programming Language Paradigms

Syntax edit

  Grammars
  Parsing
  Ambiguity
  Precedence and Associativity

Grammars in Practice edit

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

Execution Environments edit

  Compiled Programs
  Interpreted Programs
  Binding

Functional Programming in Haskell edit

  Concepts of Functional Languages

Pattern Matching edit

Types edit

  Data Types
  Primitive Types
  Constructed Types

Typing Disciplines edit

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

Polymorphism edit

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

The Lambda Calculus edit

High-Order Functions edit

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

Scope edit

  Definitions and Types of Scope
  Scoping with Blocks
  Scoping with Namespaces

Functional Data Structures edit

  Algebraic Data Types
  Functional Data Structures

Memory Allocation edit

Imperative Programming in Python edit

Memory Management edit

  Types of Storage
  Static Memory
  Stack
  Heap
  Garbage Collection

Abstract Data Types edit

Object-Oriented Programming edit

Exceptions edit

Parameter Passing edit

  Parameter Matching
  Evaluation Strategies

Introduction to Logic Programming edit

Unification edit

Cost Models edit

  Introduction
  Lists
  Tail Call Optimization
  Unification
  Arrays

Math in Prolog edit

  Simple Predicates
  The Power of Exhaustive Search

Semantics edit

  Quest for Meaning
  An Interpreter for ML