Introduction to Programming Languages

Table of contentsEdit

Introduction to Programming LanguagesEdit

  Preface
  Programming Language Paradigms

SyntaxEdit

  Grammars
  Parsing
  Ambiguity
  Precedence and Associativity

Grammars in PracticeEdit

  Logic Grammars
  Syntax Directed Interpretation
  Syntax Directed Translation
  Syntax Directed Type Checking

Execution EnvironmentsEdit

  Compiled Programs
  Interpreted Programs
  Binding

Functional Programming in HaskellEdit

  Concepts of Functional Languages

Pattern MatchingEdit

TypesEdit

  Data Types
  Primitive Types
  Constructed Types

Typing DisciplinesEdit

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

PolymorphismEdit

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

The Lambda CalculusEdit

High-Order FunctionsEdit

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

ScopeEdit

  Definitions and Types of Scope
  Scoping with Blocks
  Scoping with Namespaces

Functional Data StructuresEdit

  Algebraic Data Types
  Functional Data Structures

Memory AllocationEdit

Imperative Programming in PythonEdit

Memory ManagementEdit

  Types of Storage
  Static Memory
  Stack
  Heap
  Garbage Collection

Abstract Data TypesEdit

Object-Oriented ProgrammingEdit

ExceptionsEdit

Parameter PassingEdit

  Parameter Matching
  Evaluation Strategies

Introduction to Logic ProgrammingEdit

UnificationEdit

Cost ModelsEdit

  Introduction
  Lists
  Tail Call Optimization
  Unification
  Arrays

Math in PrologEdit

  Simple Predicates
  The Power of Exhaustive Search

SemanticsEdit

  Quest for Meaning
  An Interpreter for ML