* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Introduction - Valdosta State University
Join-pattern wikipedia , lookup
Flow-based programming wikipedia , lookup
Algorithm characterizations wikipedia , lookup
Stream processing wikipedia , lookup
Corecursion wikipedia , lookup
Object-relational impedance mismatch wikipedia , lookup
Assembly language wikipedia , lookup
Control flow wikipedia , lookup
History of compiler construction wikipedia , lookup
Interpreter (computing) wikipedia , lookup
Go (programming language) wikipedia , lookup
Falcon (programming language) wikipedia , lookup
Logic programming wikipedia , lookup
Programming language wikipedia , lookup
Functional programming wikipedia , lookup
Object-oriented programming wikipedia , lookup
C Sharp (programming language) wikipedia , lookup
Reactive programming wikipedia , lookup
Theory of Programming Languages Introduction What is a Programming Language? • John von Neumann (1940’s) – Stored program concept – CPU actions determined by “codes” stored in memory • Assembly Languages – Mnemonics for the Instruction Codes – Low-level • One instruction per operation – Machine-dependent High-Level Languages • Code abstractions allowed more readable and writeable programs – Assignments – Loops – Conditionals • Machine – independent • Retains the processor-model of computation • Allows human to human communication Definition • A Programming Language is a notational system for describing computation in machine-readable and human-readable form Computation • Turing machine – Mathematical concept of a machine whose operation is simple enough to be described with great precision – Powerful enough to to perform any computation a computer can – Church’s Theorem: It is impossible to build a machine that is inherently more powerful than a Turing machine. Computation • (For our purposes) Any process which can be carried out by a computer • We will concentrate on general-purpose languages that are designed to be used in general processing Machine Readablilty • Simple enough to allow efficient translation – There must be an algorithm to translate the language – This algorithm must not have too great a complexity – This is usually ensured by restricting the structure of the programming language to that of Context-free grammars (CFG’s) Human Readability • The language should allow abstractions of actions of the computer that are easy to understand – It should tend to resemble a natural language (English for us) • For large programs, there must be suitable mechanisms for reducing the amount of detail required to understand the program as a whole Abstractions in Programming Languages • Data Abstraction – Abstract properties of the data • Strings • Trees • Control Abstraction – Abstract properties of the transfer of control • Loops • Procedure calls (sort, search) Data Abstractions • Basic Abstractions – Abstract the internal representation of data values • Variables and data types • Structured Abstractions – Arrays and Records – Data Structures • Unit Abstractions – Data encapsulation – Information hiding Control Abstractions • Basic Abstractions – Variable assignment – GOTO’s • Structured Abstractions – Selection – Looping – Sub programs Unit Abstractions • Grouping a collection of related procedures into a unit whose inner workings do not need to be understood to understand the program – Ex: all I/O procedures – Ex: all statistical procedures (mean, mode, median, variance, etc) Other Abstractions • Parallel processing mechanisms – Threads – Processes – Tasks (Ada) Computational Paradigms • • • • • • Imperative (Procedural) Programming Object-Oriented Programming Functional Programming Logic Programming Event-driven Programming Concurrent Programming Imperative Programming • Imperative programming is characterized by – Sequential execution of instructions – Use of variables representing memory locations – Use of assignment to change values of variables Object-oriented Programming • Three major topics of object-oriented programming – Polymorphism – Inheritance – Encapsulation • Object – State – Behavior Functional Programming • Functional programming bases computation on evaluation of functions (or function applications) • No notion of variables or assignment • Repetitive operations are done by recursive functions (no notion of loops) Logic Programming • Logic programming is based on symbolic logic • A logic program is a collection of declarations which are true about the desired result • No notion of flow-of-control Event-driven Programming • Programming based on response to events • The underlying system recognizes the events so there is no need for control-flow mechanisms except in response to events Concurrent Programming • Synchronization – Threads, for example Language Definition • Syntax – The structure of the language (grammar) – Notational systems for formal description • BNF • Syntax diagrams • Semantics – The meaning of the language constructs – Notational systems for formal description • Operational semantics • Denotational semantics • Axiomatic semantics Language Translation • For a programming language to be useful, it needs a translator – Interpreter • A translator that executes a program directly – Compiler • A translator that produces an equivalent program in a form suitable for execution Interpretation source code input interpreter output Compilation source code compile target code further translation executable code executable code input processor output Phases of translation • Lexical analyzer (scanner) • Syntax analyzer (parser) • Semantic analyzer Language Design • Machine and human readability are overriding requirements • Facilities for the natural expression of the structure of data • Goal of abstraction is complexity control