• Compiler Chapter1 Test


    Chapter 1

    Introduction

    Programming languages are notations for describing computations to people and to machines. The world as we know it depends on programming languages, because all the software running on all the computers was written in some programming language. But, before a program can be run, it first must be translated into a form in which it can be executed by a computer.

    The software systems that do this translation are called compilers.

    This book is about how to design and implement compilers. We shall dis­cover that a few basic ideas can be used to construct translators for a wide variety of languages and machines. Besides compilers, the principles and tech­niques for compiler design are applicable to so many other domains that they are likely to be reused many times in the career of a computer scientist. The study of compiler writing touches upon programming languages, machine ar­chitecture, language theory, algorithms, and software engineering.

    In this preliminary chapter, we introduce the different forms of language translators, give a high level overview of the structure of a typical compiler, and discuss the trends in programming languages and machine architecture that are shaping compilers. We include some observations on the relationship between compiler design and computer-science theory and an outline of the applications of compiler technology that go beyond compilation. We end with a brief outline of key programming-language concepts that will be needed for our study of compilers.

    1.1 Language Processors

    Simply stated, a compiler is a program that can read a program in one lan­guage — the source language — and translate it into an equivalent program in another language — the target language; see Fig. 1.1. An important role of the compiler is to report any errors in the source program that it detects during the translation process.

    clip_image002

    If the target program is an executable machine-language program, it can then be called by the user to process inputs and produce outputs; see Fig. 1.2.

    clip_image004

    An interpreter is another common kind of language processor. Instead of producing a target program as a translation, an interpreter appears to directly execute the operations specified in the source program on inputs supplied by the user, as shown in Fig. 1.3.

    clip_image006

    The machine-language target program produced by a compiler is usually much faster than an interpreter at mapping inputs to outputs . An interpreter, however, can usually give better error diagnostics than a compiler, because it executes the source program statement by statement.

    Example 1.1: Java language processors combine compilation and interpreta­tion, as shown in Fig. 1.4. A Java source program may first be compiled into an intermediate form called bytecodes. The bytecodes are then interpreted by a virtual machine. A benefit of this arrangement is that bytecodes compiled on one machine can be interpreted on another machine, perhaps across a network.

    In order to achieve faster processing of inputs to outputs, some Java compil­ers, called just-in-time compilers, translate the bytecodes into machine language immediately before they run the intermediate program to process the input. □

    clip_image008

    In addition to a compiler, several other programs may be required to create an executable target program, as shown in Fig. 1.5. A source program may be divided into modules stored in separate files. The task of collecting the source program is sometimes entrusted to a separate program, called a preprocessor. The preprocessor may also expand shorthands, called macros, into source lan­guage statements.

    The modified source program is then fed to a compiler. The compiler may produce an assembly-language program as its output, because assembly lan­guage is easier to produce as output and is easier to debug. The assembly language is then processed by a program called an assembler that produces relocatable machine code as its output.

    Large programs are often compiled in pieces, so the relocatable machine code may have to be linked together with other relocatable object files and library files into the code that actually runs on the machine. The linker resolves external memory addresses, where the code in one file may refer to a location in another file. The loader then puts together all of the executable object files into memory for execution

  • 相关阅读:
    jquery 全选反选 .prop('checked',!$(this).is(':checked'));
    C#字典 Dictionary<Tkey,Tvalue> 之线程安全问题 ConcurrentDictionary<Tkey,Tvalue> 多线程字典
    javascript 获取iframe里页面中元素值的方法 关于contentWindow和contentDocumen
    WPF 之 UI 异步交互
    layui 解决从子页面传值回父页面方法
    layui 解决文本框只输入数字方法
    layui 合计出现多位小数的解决方法
    Jquery.Cookie 使用
    Git 上传代码步骤
    2分钟教你如何彻底删除Win10中 Windows.old 文件夹
  • 原文地址:https://www.cnblogs.com/Cmpl/p/2316547.html
Copyright © 2020-2023  润新知