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

Math in PrologEdit