Table of contents

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 recipy for writing a reusable grammar

Execution Environments

Compiled Programs
Interpreted Programs
Binding

Functional Programming in Haskell

Concepts of Functional Languages

Pattern Matching

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

The Lambda Calculus

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 Allocation

Imperative Programming in Python

Memory Management

Types of Storage
Static Memory
Stack
Heap
Garbage Collection

Abstract Data Types

Object-Oriented Programming

Exceptions

Parameter Passing

Parameter Matching
Evaluation Strategies

Introduction to Logic Programming

Unification

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
This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.