introduction to systems programming

6
[email protected] Page 1 of 6 Unit I : Introduction To Systems Programming I.I. Language Processors 1. Systems Programming: involves developing those programs that interface the computer system (the hardware) with the programmer and the user. These programs include compilers, interpreters, assemblers, I/O routines, schedulers, etc. 2. How is systems Programming different from other types of programming ? Systems programs are different from application programs in many ways. a) Systems programs must deal effectively with unpredictable events or “exceptions” (such as I/O errors). b) Systems programs must co-ordinate the activities of various asynchronously executing programs. Most systems programming is done with assembly language, but C, C++, and C# (C Sharp) are also used. 3. Syntax of Programming Languages: ( syntax grammar) The syntax of a programming language is the set of rules and writing conventions that allow the formation of correct programs in a language. Syntax deals only with the “representation”; it only controls the structure of a sentence and nothing more. Syntax has nothing to do with the meaning or runtime behaviour of a program. E.g., a program may be syntactically correct but not do anything useful. The syntax of a language is built from “syntactic elements” or “syntactic units”. Examples of syntactic units are: (a) Character set – e.g., English and mathematical symbols, (b) Identifiers – names for variables, functions, etc., (c) Keywords, (d) Noise words – optional words inserted in programs to improve program readability, (e) Comments – for program documentation, (f) Spaces, (g) Delimiters – e.g., to mark the beginning and end of a function in C, we use the pair of curly braces { and }, while in Pascal we use BEGIN and END. Requirements of syntax: We want a language with a syntax that is: (a) Easy to read hence easy to debug. (b) Easy to write fewer bugs in program (c) Easy to verify the correctness of a program (d) Easy to translate into another language (e) Not ambiguous.

Upload: mukesh-tekwani

Post on 22-May-2015

2.033 views

Category:

Education


4 download

DESCRIPTION

Introduction to systems programming, semantic gap, compiler

TRANSCRIPT

Page 1: Introduction to systems programming

[email protected] Page 1 of 6

Unit I : Introduction To Systems Programming

I.I. Language Processors

1. Systems Programming: involves developing those programs that interface the computer system (the hardware) with the programmer and the user. These programs include compilers, interpreters, assemblers, I/O routines, schedulers, etc.

2. How is systems Programming different from other types of programming ?

Systems programs are different from application programs in many ways.

a) Systems programs must deal effectively with unpredictable events or “exceptions” (such as I/O errors).

b) Systems programs must co-ordinate the activities of various asynchronously executing programs.

Most systems programming is done with assembly language, but C, C++, and C# (C Sharp) are also used.

3. Syntax of Programming Languages: ( syntax ∴ grammar)

The syntax of a programming language is the set of rules and writing conventions that allow the formation of correct programs in a language. Syntax deals only with the “representation”; it only controls the structure of a sentence and nothing more. Syntax has nothing to do with the meaning or runtime behaviour of a program. E.g., a program may be syntactically correct but not do anything useful.

The syntax of a language is built from “syntactic elements” or “syntactic units”. Examples of syntactic units are:

(a) Character set – e.g., English and mathematical symbols, (b) Identifiers – names for variables, functions, etc., (c) Keywords, (d) Noise words – optional words inserted in programs to improve program

readability, (e) Comments – for program documentation, (f) Spaces, (g) Delimiters – e.g., to mark the beginning and end of a function in C, we use

the pair of curly braces { and }, while in Pascal we use BEGIN and END. Requirements of syntax: We want a language with a syntax that is:

(a) Easy to read → hence easy to debug. (b) Easy to write → fewer bugs in program (c) Easy to verify the correctness of a program (d) Easy to translate into another language (e) Not ambiguous.

Page 2: Introduction to systems programming

Introduction to Systems Programming Prof. Mukesh N. Tekwani

Page 2 of 6 [email protected]

4. Semantics: ( semantics ∴ meaning )

Semantics pertains to the meaning of words. The semantics of a language is a description of what the sentences mean. It is much more difficult to express the semantics of a language than it is to express the syntax. E.g., the sentence “They are flying airplanes” has more than one meaning.

In order to implement a programming language we must know what each sentence means (declaration, expression, etc).

E.g., does the sentence

!"produce an output, !" take any inputs, !"change the value stored in a variable, !"produce an error.

5. Domain: It refers to the scope or sphere of any activity.

6. Application Domain: The scope of an application is its application domain. E.g., the application domain of an inventory program is

!"warehouse and its associated tangibles (goods, machinery, etc), !" transactions (e.g., receiving goods, purchase orders, locating goods,

shipping of goods, receiving payments, etc), !"people (e.g., workers, managers, customers).

All the above are objects in the application domain. The application domain can best be described by a person in that domain. E.g., the warehouse manager in the above example.

7. Execution Domain: (also called as the solution domain). The execution domain is the work of programmers, e.g., program code, documentation, test results, files, computers, etc.

The solution domain is partitioned into two levels:

!"Abstract, high-level documents, such as flow charts, diagrams !"Low-level – data structures, function definitions, etc.

8. Semantic Gap: The difference between the semantics of the application domain and the execution domain is called the semantic gap.

Semantic Gap

Application Domain(problems, ideas,methods, to solve theseproblems)

Execution Domain(machine code, devices,etc.)

Page 3: Introduction to systems programming

Prof. Mukesh N. Tekwani Introduction to Systems Programming

[email protected] Page 3 of 6

Consequences of semantic gap: !"Large development times – interaction between designers in application domain and

programmers.

!"Large development efforts.

!"Poor quality of software.

How is the semantic gap reduced?

The semantic gap is reduced by programming languages (PL). The use of a PL introduces a new domain called the programming language domain (or PL domain).

The PL domain bridges the gap between the application domain and the execution domain.

!"Specification gap: It is the semantic gap between the application domain and the PL domain. It can also be defined as the semantic gap between the two specifications of the same task. The specification gap is bridged by the software development team.

!"Execution gap: It is the gap between the semantics of programs written in different programming languages. The execution gap is bridged by the translator or interpreter.

Advantages of introducing the PL domain:

(a) Large development times are reduced.

(b) Better quality of software.

(c) Language processor provides diagnostic capabilities which detects errors.

9. Language Processor: It is a software which bridges the specification or execution gap.

10. Language Processing: It is any activity performed by a language processor. Diagnostic capability is a feature of a language processor. The input of a language

Execution Domain (machine code, devices, etc.)

PL Domain Application Domain (problems, ideas,methods, to solve theseproblems)

Specification gap Execution gap

Page 4: Introduction to systems programming

Introduction to Systems Programming Prof. Mukesh N. Tekwani

Page 4 of 6 [email protected]

processor is the source program. The output of a language processor is the target program. The target program is not produced if the language processor finds any errors in the source program.

Types of language processors:

(a) Language Translator: This bridges the execution gap to the machine language of a computer system. Examples are compiler and assembler.

(b) De-translator: Similar to translator, but in the opposite direction. (c) Preprocessor: This is a language processor whose source and target languages

are both high level, i.e., no translation takes place.

11. Problem-oriented Languages: In case of problem-oriented languages. The the PL domain is very close to the application domain. The specification gap is reduced in this case. Such PLs can be used only for specific applications, hence they are called problem-oriented languages. They have a large execution gap, but the execution gap is bridged by the translator or interpreter. Using these languages, we only have to do specify “what to do”. Software development takes less time using problem-oriented languages, but the resultant code may not be optimized. Examples : Fourth generation languages (4GL) like SQL.

12. Procedure-oriented languages: These provide general facilities and features which are required in most applications. These languages are independent of application domains. Hence, there is a large specification gap. The gap must be bridged by the application designer. Using these languages, we have to specify “what to do” and “how to do”. Examples. C, C++, FORTRAN, etc.

13. Compiler: A compiler is a language translator. It translates a source code (programs in a high-level language) into the target code (machine code, or object code).

To do this translation, a compiler steps through a number of phases. The simplest is a 2-phase compiler. The first phase is called the front end and the second phase is called the back end.

Language Processor Source program Target program

Compiler Source program Target program

Target program Input Output

Page 5: Introduction to systems programming

Prof. Mukesh N. Tekwani Introduction to Systems Programming

[email protected] Page 5 of 6

Front End: The front end translates from the high-level language to a common intermediate language. The front end is source language dependent but it is machine-independent. Thus, the front end consists of the following phases: lexical analysis, syntactic analysis, creation of symbol table, semantic analysis and generation of intermediate code. The front end also includes error-handling routines for each of these phases.

Back End: The back end translates from this common intermediate language to the machine code. The back end is machine dependent. This includes code optimization, code generation, error-handling and symbol table operations. Thus, a compiler bridges the execution gap.

14. Interpreter: It is a language processor. It also bridges the execution gap but does not generate the machine code. An interpreter executes a program written in a high level language. The essential difference between a compiler and an interpreter is that while a compiler generates the machine code and is then no longer needed, an interpreter is always required.

Characteristics of interpreter: !" Machine code is not stored. !" Source code is essential for repeated execution of statements. !" Statement is analysed during its interpretation. !" Useful for testing and debugging as overhead of storage is not incurred.

Differences between compiler and interpreter: COMPILER INTERPRETER

1. Scans the entire program first and then translates it into machine code.

1. Translates the program line-by-line.

2. Converts the entire program to machine code; when all the syntax errors have been removed, execution takes place.

2. Each time the program is executed, every line is checked for syntax error and then converted to equivalent machine code.

3. Execution time is less 3. Execution time is more. 4. Machine code can be saved and

used; source code and compiler no longer needed.

4. Machine code cannot be saved; interpreter is always required for translation.

Interpreter

Source program

Output

Input

Page 6: Introduction to systems programming

Introduction to Systems Programming Prof. Mukesh N. Tekwani

Page 6 of 6 [email protected]

5. Since source code is not required, tampering with the source code is not possible.

5. Source code can be easily modified and hence no security of programs.

6. Slow for debugging. 6. Fast for debugging.

REVIEW QUESTIONS

1. Define the term “systems programming”. How is systems programming different from other types of programming?

2. Define the term “syntax” in the context of programming languages. What are the desirable qualities of syntax?

3. What are syntactic units. Illustrate with examples. 4. Explain the term “semantics” in the context of programming languages. 5. Explain the concept of domain; elaborate on the terms “application domain” and

“execution domain”. 6. What is “semantic gap”? What are the consequences of this gap? How is this gap

reduced? 7. What is the need of introducing the PL domain? 8. Explain the terms “problem-oriented language” and “procedure-oriented language”.

Give two examples of each. Mention briefly the merits and demerits of each type of language.

9. Define the terms “front end” and “back end” as applied to a compiler. 10. Explain the difference between preprocessor and language translator. 11. Mention the major differences between compiler and interpreter.

* * * * * * * * *