PRINCIPLES OF PROGRAMMING LANGUAGES
UNIT 1
By-Garima Jain
Presentation Outline
Programming Language: Definition, History ,Feature Issues in Language Design Structure and Operation of Computer Programming Language Paradigms Efficiency, Regularity Issues in Language Translation Syntax and Semantics
Programming Languages
Definition : A notation of a algorithm and data structures are called a programming language.
Why study programming languages
To improve your ability to develop effective algorithms
To improve your use of existing programming languages
To increase your vocabulary of useful programming constructs
To allow a better choice of programming language To make it easier to learn a new language To make it easier to design a new language
History
1951- 55: Experimental use of expression compilers.
1956- 60: FORTRAN, COBOL, LISP, Algol 60. 1961- 65: APL notation, Algol 60 (revised),
SNOBOL, CPL. 1966- 70: APL, SNOBOL 4, FORTRAN 66,
BASIC, SIMULA, Algol 68, Algol-W, BCPL. 1971- 75: Pascal, PL/1 (Standard), C,
Scheme, Prolog. 1976- 80: Smalltalk, Ada, FORTRAN 77, ML.
History
1981- 85: Smalltalk-80, Prolog, Ada 83.
1986- 90: C++, SML, Haskell. 1991- 95: Ada 95, TCL, Perl. 1996- 2000: Java. 2000- 05: C#, Python, Ruby, Scala.
Language development
Numerically based languages
Computing mathematical expressions
FORTRAN, Algol, Pascal, PL/1, BASIC, C, C++
Business languages
COBOL (Common Business Oriented Language) English-like notation
Language development
Artificial intelligence languages
Tree search; Rule-based paradigm
LISP (LISt Processing)
PROLOG (PROgramming in LOGic)
System languages
C, C++
Script languages: AWK, Perl, TCL/TK
Web programming: HTML, XML, Java,
Microsoft *.NET family
Software architectures Mainframe era
Batch processing (batches of files)
Interactive processing (time sharing)
Effects on language design
File I/O in batch processing
Error handling in batch processing
Time constraints in interactive processing
Software architectures Personal computers
Interactive processing
Embedded system environments
Effects on language design
No need for time sharing
Good interactive graphics
Non-standard I/O devices for embedded systems
Software architectures Networking era
Client-server model of computing
Server: a program that provides information
Client - a program that requests information
Effects on language design
Interaction between the client and server programs
Active web pages, Security issues, Performance
Attributes of a good language Conceptual integrity Orthogonality Naturalness for the application Support for abstraction Ease of program verification Programming environment Portability of programs Cost of use Cost of execution. Cost of program translation. Cost of program creation, testing, and use. Cost of program maintenance.
Language Design Issues
Design to Run efficiently : early languages Easy to write correctly : new languages
Data typing features in ML Class of C++ Package of Ada
The Structure And Operation Of A Computer
A computer is an integrated set of algorithms and data structures capable of storing and executing programs. Hardware computer or virtual computer
Computer Architecture
•Well-known computer architecture: Von Neumann• Imperative languages, most dominant, because ofvon Neumann computers– Data and programs stored in memory– Memory is separate from CPU– Instructions and data are piped from memory to CPU– Basis for imperative languages• Variables model memory cells• Assignment statements model piping• Iteration is efficient
The von Neumann Architecture
Virtual Computers Hardware realization
Physical devices Firmware realization
microprogramming Software simulation
Some other programming language Combination of these techniques
Major Components of a Computer
Data Various kinds of elementary and structured data.
Primitive operations Sequence control
Controlling the sequence of primitive operations execution.
Major Components of a Computer
Data access Controlling the data supplied to each execution of
an operation. Storage management
Controlling the allocation of storage for programs and data.
Operating environment Providing mechanisms for communication with
an external environment containing programs and data.
Data Main memory High-speed register High-speed cache memory External files
Data and Program
Operations A set of build-in primitive operations
Arithmetic operations on each built-in numeric data (+,-,*,/)
Testing various properties of data items (test for zero, positive, and negative numbers)
Accessing and modifying various parts of a data item
Controlling input-output devices Sequence control (jumps)
Sequence Control There is an interpreter :
Fetch the instruction Decode instruction Fetch designated operands Branch to designated operation Execute primitive operations 1 to n
Using an address register
Data Access Access to operands of the operation
Storage Management Keeping all resources of the computer operating as
much as possible Memory Central processor External data devices
MultiprogrammingCache memory
Operating Environment The outside world of computer; a set of peripherals
and input-output devices
Language Paradigms
Imperative / procedural languages
Applicative / functional languages
Rule-based / declarative languages
Object-oriented languages
Imperative / procedural languages
Statement oriented languages that change machine state
(C, Pascal, FORTRAN, COBOL)
Computation: a sequence of machine states (contents of memory)
Syntax: S1, S2, S3, ... where S1, S2, … are statements
Applicative / functional languages
Programming consists of building the function that computes the answer
Computation: Function composition is major operation (ML, LISP)
Syntax: P1(P2(P3(X)))
Rule-based / declarative languages
Computation: Actions are specified by rules that check for the presence of certain enabling conditions. (Prolog)
The order of execution is determined by the enabling conditions, not by the order of the statements.
Syntax: Condition Action
Object-oriented languages
Imperative languages that merge applicative design
with imperative statements (Java, C++, Smalltalk)
Syntax: Set of objects (classes) containing data
(imperative concepts) and methods (applicative
concepts)
Language Translation issues
Programming language Syntax Key criteria concerning syntax Basic syntactic concepts Overall Program-Subprogram structure
Stages in Translation Analysis of the source program Synthesis of the object program Bootstrapping
Syntax
The syntax of a programming language describes the
structure of programs without any consideration of
their meaning.
Key criteria concerning syntax
Readability – a program is considered readable if the algorithm and data are apparent by inspection.Write-ability – ease of writing the program.Verifiability – ability to prove program
correctness (very difficult issue) Translatability – ease of translating the program into executable form.Lack of ambiguity – the syntax should provide for ease of avoiding ambiguous structures
Basic Syntactic Concepts
Character set – The alphabet of the language. Several different character sets are used: ASCII, EBCIDIC, Unicode
Identifiers – strings of letters of digits usually beginning with a letter
Operator Symbols – +-*/ Keywords or Reserved Words – used as a fixed part
of the syntax of a statement
Basic Syntactic Concepts
Noise words – optional words inserted into statements to improve readability
Comments – used to improve readability and for documentation purposes. Comments are usually enclosed by special markers
Blanks – rules vary from language to language. Usually only significant in literal strings
Basic Syntactic Concepts
Delimiters – used to denote the beginning and the end of syntactic constructs
Expressions – functions that access data objects in a program and return a value
Statements – these are the sentences of the language, they describe a task to be performed
Overall Program-Subprogram Structure
Separate subprogram definitions: Separate compilation, linked at load time E.g. C/C++
Separate data definitions: General approach in OOP.
Nested subprogram definitions: Subprogram definitions appear as declarations within the main program or other subprograms. E.g. Pascal
Overall Program-Subprogram Structure
Separate interface definitions:C/C++ header files
Data descriptions separated from executable statements. A centralized data division contains all data declarations. E.g. COBOL
Un-separated subprogram definitions: No syntactic distinction between main program statements and subprogram statements.E.g. BASIC
Stages in Translation
Analysis of the source program
Synthesis of the object program
Bootstrapping
Analysis of the source program
Lexical analysis (scanning) – identifying the tokens of the programming language: keywords, identifiers, constants and other symbols
In the program void main(){ printf("Hello World\n"); }
the tokens are
void, main, (, ), {, printf, (, "Hello World\n", ), ;, }
Syntactic and Semantic Analysis
Syntactic analysis (parsing) – determining the structure of the program, as defined by the language grammar.
Semantic analysis - assigning meaning to the syntactic structures
Example: int variable1;
meaning: 4 bytes for variable1 , a specific set of operations to be used with variable1.
Basic Semantic Tasks
The semantic analysis builds the bridge between analysis and synthesis.
Basic semantic tasks:
• Symbol–table maintenance• Insertion of implicit information• Error detection• Macro processing
Result : an internal representation, suitable to be used for code optimization and code generation.
Synthesis of the object program
Three main steps:
Optimization - Removing redundant statements
Code generation - generating assembler commands with relative memory addresses for the separate program modules - obtaining the object code of the program.
Linking and loading - resolving the addresses - obtaining the executable code of the program.
Optimization example
Intermediate code:
Temp1 = B + C
Temp2 = Temp1 + D
A = Temp2
Assembler code not optimized:
LOAD_R B
ADD_R C
STORE_R Temp1
LOAD_R Temp1
ADD_R D
STORE_R Temp2
LOAD_R Temp2
STORE_R AStatements in yellow can be removed
Bootstrapping
The compiler for a given language can be written in the same language.
• A program that translates some internal representation into assembler code.
• The programmer manually re-writes the compiler into the internal representation, using the algorithm that is encoded into the compiler.
From there on the internal representation is translated into assembler and then into machine language.
Syntax and Semantics Syntax: what the program looks like. Semantics: the meaning given to the various
syntactic constructs.
Example:
V: array [0..9] of integer;
int V[10];
THANK YOU.. !!