system sw 4

Embed Size (px)

Citation preview

  • 8/8/2019 system sw 4

    1/11

    CAP318 SYSTEM SOFTWARE

    HOME WORK IV

    Submitted To Submitted By-

    Lect. Mandeep Kaur Surendra

    MCA 4th SEM

    D3804A15

    10806601

    Declaration:

    I declare that this assignment is my individual work. I have not copied from any other

    students work or from any other source except where due acknowledgment is made

    explicitly in the text, nor has any part been written for me by another person.

    Students Signature: surendra

    Evaluators comments:

    _____________________________________________________________________

    Marks obtained: ___________ out of ______________________

    Content of Homework should start from this page only:

    1

  • 8/8/2019 system sw 4

    2/11

    Part A

    Q1. Which kind of source program errors would be generated in lexical analysis?

    ANSWER:

    Lexical analysis is the process of converting a sequence of characters into a sequence of

    tokens. A program or function which performs lexical analysis is called a lexical analyzer,

    lexer or scanner. A lexer often exists as a single function which is called by a parser oranother function.

    It breaks the text down into the smallest useful atomic units, known as tokens, whilethrowing away (or at least, putting to one side) extraneous information, such as white

    space and comments and parsing which operates on tokens and groups them into useful

    grammatical structures.

    The lexical structure is specified using regular expressions.

    (1) Get rid of white spaces (e.g., \t, \n, \sp) and comments

    (2) Line numbering

    Errors that might occur during scanning, called lexical errors include

    Encountering characters that are not in the language's alphabet

    Too many characters in a word or line (yes, such languages do exist!)

    An "unclosed" character or string literal

    An end of file within a comment

    2

  • 8/8/2019 system sw 4

    3/11

    Example:

    Consider this expression in the C programming language:

    Sum=3+2;

    Tokenized in the following table:

    Q2. Formal specification and formal grammar differs in which concern?

    ANSWER:

    Formal Specification:

    Formal specifications are expressed in a mathematical notation with precisely

    defined vocabulary, syntax and semantics.

    The specification of a programming language is intended to provide a definition that the

    language users and the implementers can use to determine whether the behavior of aprogram

    is correct, given its source code.

    Formal specification involves investing more effort in the early phases of

    software development.

    This reduces requirements errors as it forces a detailed analysis of therequirements.

    3

    lexeme token type

    sum Identifier

    = Assignment operator

    3 Number

    + Addition operator

    2 Number

    ; End of statement

    http://wiki/Programmerhttp://wiki/Programming_language_implementationhttp://wiki/Computer_programhttp://wiki/Source_codehttp://wiki/Programming_language_implementationhttp://wiki/Computer_programhttp://wiki/Source_codehttp://wiki/Programmer
  • 8/8/2019 system sw 4

    4/11

    Incompleteness and inconsistencies can be discovered and resolved.

    Hence, savings as made as the amount of rework due to requirements problems

    is reduced.

    A programming language specification can take several forms, including the following:

    An explicit definition of the syntax, static semantics, and execution semantics of thelanguage. While syntax is commonly specified using a formal grammar, semantic

    definitions may be written in natural language (e.g., as in the C language), or a formal

    semantics (e.g., as in Standard ML [30] and Scheme [31] specifications).

    A description of the behavior of atranslatorfor the language (e.g., the C++ ). The

    syntax and semantics of the language have to be inferred from this description, which

    may be written in natural or a formal language.

    A reference ormodelimplementation, sometimes written in the language beingspecified (e.g., Prolog). The syntax and semantics of the language are explicit in the

    behavior of the reference implementation.

    Formal Grammar:-

    It is an explicit definition of the syntax, static semantics, and execution semantics of the

    language. While syntax is commonly specified using a formal grammar.

    A formal grammar (sometimes simply called a grammar) is a set of rules of a specific

    kind, for forming strings in a formal language. The rules describe how to form strings

    from the language's alphabet that are valid according to the language's syntax. A

    grammar does not describe the meaning of the strings or what can be done with them

    in whatever context only their form. A formal grammar is a set of rules for rewriting

    strings, along with a "start symbol" from which rewriting must start. Therefore, a

    grammar is usually thought of as a language generator. However, it can also sometimes

    be used as the basis for a "recognizer" a function in computing that determines whether

    a given string belongs to the language or is grammatically incorrect. To describe such

    recognizers, formal language theory uses separate formalisms, known as automatatheory. One of the interesting results of automata theory is that it is not possible to

    design a recognizer for certain formal languages.

    4

    http://wiki/Natural_languagehttp://wiki/C_(programming_language)http://wiki/Formal_semantics_of_programming_languageshttp://wiki/Formal_semantics_of_programming_languageshttp://wiki/Standard_MLhttp://wiki/Scheme_(programming_language)http://wiki/Compilerhttp://wiki/Compilerhttp://wiki/C++http://wiki/Reference_implementationhttp://wiki/Reference_implementationhttp://wiki/Reference_implementationhttp://wiki/Reference_implementationhttp://wiki/Reference_implementationhttp://wiki/Meta-circular_evaluatorhttp://wiki/Meta-circular_evaluatorhttp://wiki/Prologhttp://wiki/Natural_languagehttp://wiki/C_(programming_language)http://wiki/Formal_semantics_of_programming_languageshttp://wiki/Formal_semantics_of_programming_languageshttp://wiki/Standard_MLhttp://wiki/Scheme_(programming_language)http://wiki/Compilerhttp://wiki/C++http://wiki/Reference_implementationhttp://wiki/Meta-circular_evaluatorhttp://wiki/Meta-circular_evaluatorhttp://wiki/Prolog
  • 8/8/2019 system sw 4

    5/11

    Q3. Illustrate the kind of source program errors which would be detected in code

    generation?

    ANSWER:

    Code generation is the process by which a compiler's code generator converts some

    internal representation of source code into a form (e.g., machine code) that can be

    readily executed by a machine (often a computer).

    The input to the code generator typically consists of a parse tree or an abstract syntax

    tree. The tree is converted into a linear sequence of instructions, usually in an

    intermediate language such as three address code. Further stages of compilation may or

    may not be referred to as "code generation", depending on whether they involve a

    significant change in the representation of the program.

    Tasks which are typically part of a sophisticated compiler's "code generation" phase

    include:

    Instruction selection: which instructions to use.

    Instruction scheduling: in which order to put those instructions. Scheduling is a speed

    optimization that can have a critical effect on pipelined machines.

    Register allocation: the allocation of variables to processor registers.

    Instruction selection is typically carried out by doing a recursive post order traversal onthe abstract syntax tree, matching particular tree configurations against templates; for

    example, the tree W: = ADD(X, MUL(Y, Z)) might be transformed into a linear

    sequence of instructions by recursively generating the sequences for t1:= X and t2:=

    MUL(Y, Z), and then emitting the instruction ADD W, t1, t2.

    In a compiler that uses an intermediate language, there may be two instruction selection

    stages one to convert the parse tree into intermediate code, and a second phase

    much later to convert the intermediate code into instructions in the ISA of the target

    machine. This second phase does not require a tree traversal; it can be done linearly,

    and typically involves a simple replacement of intermediate-language operations withtheir corresponding opcodes. However, if the compiler is actually a language translator

    (for example, one that converts Eiffel to C), then the second code-generation phase

    may involve building a tree from the linear intermediate code.

    5

  • 8/8/2019 system sw 4

    6/11

    Part B

    Q1. In which way the symbol table in compiler differs from symbol table of

    assemblers?

    ANSWER:

    INTRODUCTION: -

    In assembly language, the programme is responsible for looping or recursive behaviour

    using jumps. As a result, a simple assembler does not need to maintain a great deal of

    internal information about stack frames or variable bindings, since variables can

    normally be bound directly to addresses. In higher level language, after the scanning

    phase of the compiler produces a token stream, it is usually possible to identify which

    tokens will be potential variables.

    SYMBOL TABLE OF ASSEMBLER:-

    The symbol table include each entry not only the name and assembly-time value fields

    but also a length field and a relative location indicator.

    This length fields indicates the length (in bytes) of the instruction to which the symbol

    is attached.

    Symbol Table:-

    Symbol(8bytes) Value(4 bytes) Length(1 byte) Relocation

    JOHNbbbb 0000 01 R

    FOURbbbb 000C 04 R

    FIVEbbbb 0010 04 R

    TEMPbbbb 0014 04 R

    SYMBOL TABLE OF COMPLIER:-

    It is created by Lexical Analysis to represent the program as a string of tokens

    rather than of individual characters.

    Spaces and Comments in the source are not represented by Symbols and are not

    used by future phases.

    6

  • 8/8/2019 system sw 4

    7/11

    Attributes stored in a symbol table for each identifier:

    type

    size

    scope/visibility information

    base address

    addresses to location of auxiliary symbol tables (in case of records,

    procedures, classes)

    address of the location containing the string which actually names the

    identifier and its length in the string pool

    Table Index

    Q2. Draw a block diagram of the phases of a compiler and indicate the main function

    of each phase.ANSWER:

    ABOUT COMPILER: -

    A compiler is a program that reads a program in one language, the source language and translates into an

    equivalent program in another language, the target language.

    PHASES OF COMPLIER: -

    7

  • 8/8/2019 system sw 4

    8/11

  • 8/8/2019 system sw 4

    9/11

    3. Semantic analyzer:

    It takes the output of syntax analyzer and produces another tree.

    4. Intermediate code generator:

    It takes a tree as an input produced by semantic analyzer and produces intermediate

    code.

    5. Parser Generators:

    The specification of input based on regular expression. The organization is based on

    finite automation.

    6. Scanner Generator:

    The specification of input based on regular expression. The organization is based on

    finite automation.

    7. Syntax-Directed Translation:

    It walks the parse tee and as a result generates intermediate code.

    8. Automatic Code Generators:

    It translates intermediate rampage into machine language.

    9. Data-Flow Engines:

    It does code optimization using data-flow analysis.

    9

  • 8/8/2019 system sw 4

    10/11

    Q3. Is it always worthwhile to optimize a program?

    ANSWER:

    Program optimization or software optimization is the process of modifying a software

    system to make some aspect of it work more efficiently or use fewer resources. In

    general, a computer program may be optimized so that it executes more rapidly, or is

    capable of operating with less memory storage or other resources, or draw less power.

    The optimized system will typically only be optimal in one application or for one

    audience. One might reduce the amount of time that a program takes to perform some

    task at the price of making it consume more memory. In an application where memory

    space is at a premium, one might deliberately choose a slower algorithm in order to use

    less memory. Often there is no one size fits all design which works well in all cases,

    so engineers make trade-offs to optimize the attributes of greatest interest.

    Additionally, the effort required to make a piece of software completely optimal

    incapable of any further improvement is almost always more than is reasonable forthe benefits that would be accrued; so the process of optimization may be halted before

    a completely optimal solution has been reached.

    "Levels" of optimization:

    1. Design level

    2. Source code level

    3. Compile level

    4. Assembly level5. Runtime

    Example:

    10

  • 8/8/2019 system sw 4

    11/11

    11