FACTOID # 3: South Carolina has the highest rate of violent crimes and aggravated assaults per capita among US states.
 
 Home   Encyclopedia   Statistics   States A-Z   Flags   Maps   FAQ   About 
   
 
WHAT'S NEW
RELATED ARTICLES
People who viewed "Compiler" also viewed:
 

SEARCH ALL

FACTS & STATISTICS    Advanced view

Search encyclopedia, statistics and forums:

 

 

(* = Graphable)

 

 


Encyclopedia > Compiler
A diagram of the operation of a typical multi-language, multi-target compiler.
A diagram of the operation of a typical multi-language, multi-target compiler.

A compiler is a computer program (or set of programs) that translates text written in a computer language (the source language) into another computer language (the target language). The original sequence is usually called the source code and the output called object code. Commonly the output has a form suitable for processing by other programs (e.g., a linker), but it may be a human-readable text file. Compiler is an 2 part anime Original Video Animation The story revolves around two sexy female computer programs sent to our world from the two-dimentional computer world in order to conqure our 3-D Universe. ... Image File history File links This is a lossless scalable vector image. ... Image File history File links This is a lossless scalable vector image. ... A computer program is a collection of instructions that describe a task, or set of tasks, to be carried out by a computer. ... A programming language is an artificial language that can be used to control the behavior of a machine, particularly a computer. ... Source code (commonly just source or code) is any series of statements written in some human-readable computer programming language. ... In computer science, object file or object code is an intermediate representation of code generated by a compiler after it processes a source code file. ... Figure of the linking process, where object files and static libraries are assembled into a new library or executable. ... It has been suggested that this article or section be merged with Plain text. ...


The most common reason for wanting to translate source code is to create an executable program. The name "compiler" is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language or machine language). A program that translates from a low level language to a higher level one is a decompiler. A program that translates between high-level languages is usually called a language translator, source to source translator, or language converter. A language rewriter is usually a program that translates the form of expressions without a change of language. A high-level programming language is a programming language that, in comparison to low-level programming languages, may be more abstract, easier to use, or more portable across platforms. ... An assembly language is a low-level language for programming computers. ... A system of codes directly understandable by a computers CPU is termed this CPUs native or machine language. ... A decompiler is the name given to a computer program that performs the reverse operation to that of a compiler. ... Rewriting in mathematics, computer science and logic covers a wide range of non-deterministic methods of replacing subterms of a formula with other terms. ...


A compiler is likely to perform many or all of the following operations: lexical analysis, preprocessing, parsing, semantic analysis, code generation, and code optimization. In computer science, lexical analysis is the process of converting a sequence of characters into a sequence of tokens. ... Preprocessing is the act of processing data before it is parsed. ... An example of parsing a mathematical expression. ... This article or section does not adequately cite its references or sources. ... In computing, optimization is the process of modifying a system to improve its efficiency. ...

Contents

History

Software for early computers was exclusively written in assembly language for many years. Higher level programming languages were not invented until the benefits of being able to reuse software on different kinds of CPUs started to become significantly greater than the cost of writing a compiler. The very limited memory capacity of early computers also created many technical problems when implementing a compiler. CPU can stand for: in computing: Central processing unit in journalism: Commonwealth Press Union in law enforcement: Crime prevention unit in software: Critical patch update, a type of software patch distributed by Oracle Corporation in Macleans College is often known as Ash Lim. ... This article does not cite any references or sources. ...


Towards the end of the 1950s, machine-independent programming languages were first proposed. Subsequently, several experimental compilers were developed. The first compiler was written by Grace Hopper, in 1952, for the A-0 programming language. The FORTRAN team led by John Backus at IBM is generally credited as having introduced the first complete compiler, in 1957. COBOL was an early language to be compiled on multiple architectures, in 1960.[1] Rear Admiral Grace Murray Hopper (December 9, 1906 – January 1, 1992) was an American computer scientist and United States Navy officer. ... For A0 the ISO 216 specification for paper, see paper size. ... Fortran (previously FORTRAN[1]) is a general-purpose[2], procedural,[3] imperative programming language that is especially suited to numeric computation and scientific computing. ... John Backus (born December 3, 1924) is an American computer scientist, notable as the inventor of the first high-level programming language (FORTRAN), the Backus-Naur form (BNF, the almost universally used notation to define formal language syntax), and the concept of Function-level programming. ... For other uses, see IBM (disambiguation) and Big Blue. ... COBOL (pronounced //) is a Third-generation programming language, and one of the oldest programming languages still in active use. ...


In many application domains the idea of using a higher level language quickly caught on. Because of the expanding functionality supported by newer programming languages and the increasing complexity of computer architectures, compilers have become more and more complex. A programming language is an artificial language that can be used to control the behavior of a machine, particularly a computer. ...


Early compilers were written in assembly language. The first self-hosting compiler — capable of compiling its own source code in a high-level language — was created for Lisp by Hart and Levin at MIT in 1962.[2] Since the 1970s it has become common practice to implement a compiler in the language it compiles, although both Pascal and C have been popular choices for implementation language. Building a self-hosting compiler is a bootstrapping problem -- the first such compiler for a language must be compiled either by a compiler written in a different language, or (as in Hart and Levin's Lisp compiler) compiled by running the compiler in an interpreter. Self-hosting refers to the use of a computer program as part of the toolchain or operating system that produces new versions of that same program—for example, a compiler that can compile its own source code. ... Lisp is a family of computer programming languages with a long history and a distinctive fully-parenthesized syntax. ... “MIT” redirects here. ... Pascal is a structured imperative computer programming language, developed in 1970 by Niklaus Wirth as a language particularly suitable for structured programming. ... C is a general-purpose, block structured, procedural, imperative computer programming language developed in 1972 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. ... Bootstrapping is a term used in computer science to describe the techniques involved in writing a compiler (or assembler) in the target programming language which it is intended to compile. ... In computer science, an interpreter is a computer program that executes, or performs, instructions written in a computer programming language. ...


Compilers in education

Compiler construction and compiler optimization are taught at universities as part of the computer science curriculum. Such courses are usually supplemented with the implementation of a compiler for an educational programming language. A well-documented example is Niklaus Wirth's PL/0 compiler, which Wirth used to teach compiler construction in the 1970s.[3] In spite of its simplicity, the PL/0 compiler introduced several influential concepts to the field: Compiler optimization is the process of tuning the output of a compiler to minimize some attribute (or maximize the efficiency) of an executable program. ... Computer science, or computing science, is the study of the theoretical foundations of information and computation and their implementation and application in computer systems. ... An educational programming language is a programming language that is designed primarily as a learning instrument and not so much as a tool for writing real-world application programs. ... Niklaus E. Wirth (born February 15, 1934) is a Swiss computer scientist, best known for designing several programming languages, including Pascal, and for pioneering several classic topics in software engineering. ... There are at least two programming languages known as PL/0. ...

  1. Program development by stepwise refinement (also the title of a 1971 paper by Wirth[4])
  2. The use of a recursive descent parser
  3. The use of EBNF to specify the syntax of a language
  4. A code generator producing portable P-code
  5. The use of T-diagrams in the formal description of the bootstrapping problem

A recursive descent parser is a top-down parser built from a set of mutually-recursive procedures (or a non-recursive equivalent) where each such procedure usually implements one of the production rules of the grammar. ... The Extended Backus-Naur form (EBNF) is any variation on the basic Backus-Naur form (BNF) metasyntax notation with (some of) the following additional constructs: square brackets [..] surrounding optional items, suffix * for Kleene closure (a sequence of zero or more of an item), suffix + for one or more of an... This article or section does not adequately cite its references or sources. ... A p-code is similar to a byte-code but a p-code works at a higher level. ... Bootstrapping is a term used in computer science to describe the techniques involved in writing a compiler (or assembler) in the target programming language which it is intended to compile. ...

Compiler output

One method used to classify compilers is by the platform on which the generated code they produce executes. This is known as the target platform. In computing, a platform describes some sort of framework, either in hardware or software, which allows software to run. ...


A native or hosted compiler is one whose output is intended to directly run on the same type of computer and operating system as the compiler itself runs on. The output of a cross compiler is designed to run on a different platform. Cross compilers are often used when developing software for embedded systems that are not intended to support a software development environment. A cross compiler is a compiler capable of creating executable code for a platform other than the one on which the compiler is run. ... A router, an example of an embedded system. ...


The output of a compiler that produces code for a virtual machine (VM) may or may not be executed on the same platform as the compiler that produced it. For this reason such compilers are not usually classified as native or cross compilers. In computer science, a virtual machine is software that creates a virtualized environment between the computer platform and its operating system, so that the end user can operate software on an abstract machine. ...


Compiled versus interpreted languages

Higher-level programming languages are generally divided for convenience into compiled languages and interpreted languages. However, there is rarely anything about a language that requires it to be exclusively compiled, or exclusively interpreted. The categorization usually reflects the most popular or widespread implementations of a language — for instance, BASIC is thought of as an interpreted language, and C a compiled one, despite the existence of BASIC compilers and C interpreters. A compiled language is a programming language whose implementations are typically compilers (translators which generate machine code from source code), and not interpreters (step-by-step executors of source code, where no translation takes place). ... In computer programming, an interpreted language is a programming language whose programs may be executed from source form, by an interpreter. ...


In a sense, all languages are interpreted, with "execution" being merely a special case of interpretation performed by transistors switching on a CPU. Modern trends toward just-in-time compilation and bytecode interpretation also blur the traditional categorizations. Assorted discrete transistors A transistor is a semiconductor device, commonly used as an amplifier or an electrically controlled switch. ... CPU can stand for: in computing: Central processing unit in journalism: Commonwealth Press Union in law enforcement: Crime prevention unit in software: Critical patch update, a type of software patch distributed by Oracle Corporation in Macleans College is often known as Ash Lim. ... For other uses, see Just In Time. ... Bytecode is a binary representation of an executable program designed to be executed by a virtual machine rather than by dedicated hardware. ...


There are exceptions. Some language specifications spell out that implementations must include a compilation facility; for example, Common Lisp. Other languages have features that are very easy to implement in an interpreter, but make writing a compiler much harder; for example, APL, SNOBOL4, and many scripting languages allow programs to construct arbitrary source code at runtime with regular string operations, and then execute that code by passing it to a special evaluation function. To implement these features in a compiled language, programs must usually be shipped with a runtime library that includes a version of the compiler itself. Common Lisp, commonly abbreviated CL, is a dialect of the Lisp programming language, published in ANSI standard X3. ... APL (for A Programming Language) is an array programming language based on a notation invented in 1957 by Kenneth E. Iverson while at Harvard University. ... SNOBOL (StriNg Oriented symBOlic Language) is a computer programming language that was developed between 1962 and 1967 at AT&T Bell Laboratories by David J. Farber, Ralph E. Griswold and Ivan P. Polonsky. ... In computer science, runtime describes the operation of a computer program, the duration of its execution, from beginning to termination (compare compile time). ...


Hardware compilation

The output of some compilers may target hardware at a very low level. For example a Field Programmable Gate Array (FPGA) or structured Application-specific integrated circuit (ASIC). Such compilers are said to be hardware compilers or synthesis tools because the programs they compile effectively control the final configuration of the hardware and how it operates; the output of the compilation are not instructions that are executed in sequence - only an interconnection of transistors or lookup tables. For example, XST is the Xilinx Synthesis Tool used for configuring FPGAs. Similar tools are available from Altera, Synplicity, Synopsys and other vendors. For other uses, see Hardware (disambiguation). ... A field-programmable gate array or FPGA is a semiconductor device used to process digital information, similar to a microprocessor. ... This article does not cite any references or sources. ... A silicon compiler is a software system that takes a users specifications and automatically generates an integrated circuit (IC). ...


Compiler design

The approach taken to compiler design is affected by the complexity of the processing that needs to be done, the experience of the person(s) designing it, and the resources (eg, people and tools) available.


A compiler for a relatively simple language written by one person might be a single, monolithic piece of software. When the source language is large and complex, and high quality output is required the design may be split into a number of relatively independent phases, or passes. Having separate phases means development can be parceled up into small parts and given to different people. It also becomes much easier to replace a single phase by an improved one, or to insert new phases later (eg, additional optimizations).


The division of the compilation processes in phases (or passes) was championed by the Production Quality Compiler-Compiler Project (PQCC) at Carnegie Mellon University. This project introduced the terms front end, middle end (rarely heard today), and back end. The Production Quality Compiler-Compiler Project (or PQCC) was a pipe dream conceived at Carnegie Mellon University. ... Carnegie Mellon University is a private research university located in Pittsburgh, Pennsylvania. ...


All but the smallest of compilers have more than two phases. However, these phases are usually regarded as being part of the front end or the back end. The point at where these two ends meet is always open to debate. The front end is generally considered to be where syntactic and semantic processing takes place, along with translation to a lower level of representation (than source code).


The middle end is usually designed to perform optimizations on a form other than the source code or machine code. This source code/machine code independence is intended to enable generic optimizations to be shared between versions of the compiler supporting different languages and target processors.


The back end takes the output from the middle. It may perform more analysis, transformations and optimizations that are for a particular computer. Then, it generates code for a particular processor and OS.


This front-end/middle/back-end approach makes it possible to combine front ends for different languages with back ends for different CPUs. Practical examples of this approach are the GNU Compiler Collection, LLVM, and the Amsterdam Compiler Kit, which have multiple front-ends, shared analysis and multiple back-ends. CPU can stand for: in computing: Central processing unit in journalism: Commonwealth Press Union in law enforcement: Crime prevention unit in software: Critical patch update, a type of software patch distributed by Oracle Corporation in Macleans College is often known as Ash Lim. ... The GNU Compiler Collection (usually shortened to GCC) is a set of programming language compilers produced by the GNU Project. ... Low Level Virtual Machine (LLVM) is a compiler infrastructure designed for compile-time, link-time, run-time, and idle-time optimization of programs from arbitrary programming languages. ... The Amsterdam Compiler Kit (ACK) is fast, lightweight and retargetable compiler suite and toolchain written by Andrew Tanenbaum and Ceriel Jacobs, and is Minix native toolchain. ...


One-pass versus multi-pass compilers

Classifying compilers by number of passes has its background in the hardware resource limitations of computers. Compiling involves performing lots of work and early computers did not have enough memory to contain one program that did all of this work. So compilers were split up into smaller programs which each made a pass over the source (or some representation of it) performing some of the required analysis and translations.


The ability to compile in a single pass is often seen as a benefit because it simplifies the job of writing a compiler and one pass compilers are generally faster than multi-pass compilers. Many languages were designed so that they could be compiled in a single pass (e.g., Pascal). A One-pass Compiler is a type of software compiler that passes through the source code of each compilation unit only once. ... A Multi-pass Compiler is a type of compiler that passes through the source code several times. ... Pascal is a structured imperative computer programming language, developed in 1970 by Niklaus Wirth as a language particularly suitable for structured programming. ...


In some cases the design of a language feature may require a compiler to perform more than one pass over the source. For instance, consider a declaration appearing on line 20 of the source which affects the translation of a statement appearing on line 10. In this case, the first pass needs to gather information about declarations appearing after statements that they affect, with the actual translation happening during a subsequent pass.


The disadvantage of compiling in a single pass is that it is not possible to perform many of the sophisticated optimizations needed to generate high quality code. It can be difficult to count exactly how many passes an optimizing compiler makes. For instance, different phases of optimization may analyse one expression many times but only analyse another expression once. Compiler optimization is the process of tuning the output of a compiler to minimize some attribute (or maximize the efficiency) of an executable program. ...


Splitting a compiler up into small programs is a technique used by researchers interested in producing provably correct compilers. Proving the correctness of a set of small programs often requires less effort than proving the correctness of a larger, single, equivalent program.


While the typical multi-pass compiler outputs machine code from its final pass, there are several other types:

  • A "source-to-source compiler" is a type of compiler that takes a high level language as its input and outputs a high level language. For example, an automatic parallelizing compiler will frequently take in a high level language program as an input and then transform the code and annotate it with parallel code annotations (e.g. OpenMP) or language constructs (e.g. Fortran's DOALL statements).
  • Stage compiler that compiles to assembly language of a theoretical machine, like some Prolog implementations
    • This Prolog machine is also known as the Warren Abstract Machine (or WAM). Bytecode compilers for Java, Python, and many more are also a subtype of this.
  • Just-in-time compiler, used by Smalltalk and Java systems, and also by Microsoft .Net's Common Intermediate Language (CIL)
    • Applications are delivered in bytecode, which is compiled to native machine code just prior to execution.

A Source-to-source compiler is a type of compiler that takes a high level language as its input and outputs a high level language. ... OpenMP logo The OpenMP (Open Multi-Processing) is an application programming interface (API) that supports multi-platform shared memory multiprocessing programming in C/C++ and Fortran on many architectures, including Unix and Microsoft Windows platforms. ... Prolog is a logic programming language. ... In 1983, David H. D. Warren designed an abstract machine for the execution of Prolog consisting of a memory architecture and an instruction set [War83]. This design became known as the Warren Abstract Machine (WAM) and has become the de facto standard target for Prolog compilers. ... Python is an interpreted, interactive programming language created by Guido van Rossum in 1990, originally as a scripting language for Amoeba OS capable of making system calls. ... For other uses, see Just In Time. ... Common Intermediate Language (CIL, pronounced either sill or kill) (formerly called Microsoft Intermediate Language or MSIL) is the lowest-level human-readable programming language in the Common Language Infrastructure and in the . ... Bytecode is a binary representation of an executable program designed to be executed by a virtual machine rather than by dedicated hardware. ...

Front end

The front end analyzes the source code to build an internal representation of the program, called the intermediate representation or IR. It also manages the symbol table, a data structure mapping each symbol in the source code to associated information such as location, type and scope. This is done over several phases, which includes some of the following: In computing, an intermediate representation is a data structure that is constructed from input data to a program, and from which part or all of the output data of the program is constructed in turn. ... In computer science, a symbol table is a data structure used by a language translator such as a compiler or interpreter, where each symbol in a programs source code is associated with information such as location, type and scope level. ...

  1. Line reconstruction. Languages which strop their keywords or allow arbitrary spaces within identifiers require a phase before parsing, which converts the input character sequence to a canonical form ready for the parser. The top-down, recursive-descent, table-driven parsers used in the 1960s typically read the source one character at a time and did not require a separate tokenizing phase. Atlas Autocode, and Imp (and some implementations of Algol and Coral66) are examples of stropped languages whose compilers would have a Line Reconstruction phase.
  2. Lexical analysis breaks the source code text into small pieces called tokens. Each token is a single atomic unit of the language, for instance a keyword, identifier or symbol name. The token syntax is typically a regular language, so a finite state automaton constructed from a regular expression can be used to recognize it. This phase is also called lexing or scanning, and the software doing lexical analysis is called a lexical analyzer or scanner.
  3. Preprocessing. Some languages, e.g., C, require a preprocessing phase which supports macro substitution and conditional compilation. Typically the preprocessing phase occurs before syntactic or semantic analysis; e.g. in the case of C, the preprocessor manipulates lexical tokens rather than syntactic forms. However, some languages such as Scheme support macro substitutions based on syntactic forms.
  4. Syntax analysis involves parsing the token sequence to identify the syntactic structure of the program. This phase typically builds a parse tree, which replaces the linear sequence of tokens with a tree structure built according to the rules of a formal grammar which define the language's syntax. The parse tree is often analyzed, augmented, and transformed by later phases in the compiler.
  5. Semantic analysis is the phase in which the compiler adds semantic information to the parse tree and builds the symbol table. This phase performs semantic checks such as type checking (checking for type errors), or object binding (associating variable and function references with their definitions), or definite assignment (requiring all local variables to be initialized before use), rejecting incorrect programs or issuing warnings. Semantic analysis usually requires a complete parse tree, meaning that this phase logically follows the parsing phase, and logically precedes the code generation phase, though it is often possible to fold multiple phases into one pass over the code in a compiler implementation.

When applied to computer languages, stropping refers to the method used to categorise letter sequences as having a special property (most often being a keyword). ... This article or section does not cite its references or sources. ... A recursive descent parser is a top-down parser built from a set of mutually-recursive procedures (or a non-recursive equivalent) where each such procedure usually implements one of the production rules of the grammar. ... Atlas Autocode (AA) was a programming language developed at Manchester University for the Atlas Computer. ... Edinburgh IMP is a development of ATLAS Autocode, initially developed around 1966-1969 at Edinburgh University, Scotland. ... ... CORAL (Computing Online Realtime Algorithmic Language) was developed in 1966 at the Royal Radar Establishment (RRE), Malvern, UK by I. F. Currie and M. Griffiths. ... In computer science, lexical analysis is the process of converting a sequence of characters into a sequence of tokens. ... Identifiers (IDs) are lexical tokens that name entities. ... This article presents the essential definitions. ... In theoretical computer science, a regular language is a formal language (i. ... In the theory of computation, a finite state machine (FSM) or finite state automaton (FSA) is an abstract machine that has only a finite, constant amount of memory. ... In computing, a regular expression is a string that is used to describe or match a set of strings, according to certain syntax rules. ... Lexical analysis is the process of taking an input string of characters (such as the source code of a computer program) and producing a sequence of symbols called lexical tokens, or just tokens, which may be handled more easily by a parser. ... In computer science, a preprocessor is a program that processes its input data to produce output that is used as input to another program. ... The C Programming Language, Brian Kernighan and Dennis Ritchie, the original edition that served for many years as an informal specification of the language The C programming language is a low_level standardized programming language developed in the early 1970s by Ken Thompson and Dennis Ritchie for use on the UNIX... For other uses, see Macro (disambiguation) A macro in computer science is a rule or pattern that specifies how a certain input sequence (often a sequence of characters) should be mapped to an output sequence (also often a sequence of characters) according to a defined procedure. ... Scheme can refer to: The Scheme programming language. ... The syntactic analysis of source code, written in a programming language, usually entails the transformation of a linear sequence of tokens into a hierarchical syntax tree (abstract syntax trees are one convenient form of syntax tree). ... An example of parsing a mathematical expression. ... A parse tree or concrete syntax tree is a tree that represents the syntactic structure of a string according to some formal grammar. ... In computer science and linguistics, a formal grammar, or sometimes simply grammar, is a precise description of a formal language — that is, of a set of strings. ... In computer science, semantic analysis is a pass by a compiler that adds semantical information to the parse tree and performs certain checks based on this information. ... A parse tree or concrete syntax tree is a tree that represents the syntactic structure of a string according to some formal grammar. ... On computer science, a datatype (often simply type) is a name or label for a set of values and some operations which can be performed on that set of values. ... Several object binding times exist in object oriented systems. ... An example of parsing a mathematical expression. ... This article or section does not adequately cite its references or sources. ...

Back end

The term back end is sometimes confused with code generator because of the overlapped functionality of generating assembly code. Some literature uses middle end to distinguish the generic analysis and optimization phases in the back end from the machine-dependent code generators. This article or section does not adequately cite its references or sources. ...


The main phases of the back end include the following:

  1. Analysis: This is the gathering of program information from the intermediate representation derived from the input. Typical analyses are data flow analysis to build use-define chains, dependence analysis, alias analysis, pointer analysis, escape analysis etc. Accurate analysis is the basis for any compiler optimization. The call graph and control flow graph are usually also built during the analysis phase.
  2. Optimization: the intermediate language representation is transformed into functionally equivalent but faster (or smaller) forms. Popular optimizations are inline expansion, dead code elimination, constant propagation, loop transformation, register allocation or even automatic parallelization.
  3. Code generation: the transformed intermediate language is translated into the output language, usually the native machine language of the system. This involves resource and storage decisions, such as deciding which variables to fit into registers and memory and the selection and scheduling of appropriate machine instructions along with their associated addressing modes (see also Sethi-Ullman algorithm).

Compiler analysis is the prerequisite for any compiler optimization, and they tightly work together. For example, dependence analysis is crucial for loop transformation. Compiler analysis is a set of algorithms to determine the properties of a programs data and control structure. ... A simple way to perform dataflow analysis (DFA) of programs is to set up dataflow equations for each node of the control flow graph (CFG) and solve them by repeatedly calculating the output from the input locally at each node until the whole system stabilizes, i. ... In computer science, use-define chains model the relation between definitions of variables and their uses in a sequence of assignments. ... In compiler theory, dependence analysis produces execution-order constraints between statements/instructions. ... Alias analysis is a technique in compiler theory, used to determine if a storage location may be accessed in more than one way. ... Pointer analysis, or points-to analysis, is a static code analysis technique that establishes which pointers, or heap references, can point to which locations. ... In programming language compiler optimization theory, escape analysis is a method for determining the dynamic scope of pointers. ... A call graph (also known as a call multigraph) is a directed graph that represents calling relationship among subroutines in a computer program. ... A control flow graph (CFG) is a representation, using graph notation, of all paths that might be traversed through a program during its execution. ... Compiler optimization is the process of tuning the output of a compiler to minimize some attribute (or maximize the efficiency) of an executable program. ... In-line expansion or inlining for short is a compiler optimization which expands a function call site into the actual implementation of the function which is called, rather than each call transferring control to a common piece of code. ... Dead code elimination is a technique used in computer science to reduce program size by removing code which can never be executed. ... In computer science constant propagation (cprop) is an optimization performed by compilers. ... Most execution time of a scientific program is spent on loops. ... In compiler optimization, register allocation is the process of multiplexing a large number of target program variables onto a small number of CPU registers. ... Automatic parallelization (also known as auto parallelization or Autoparallelization), refers to the use of a modern optimizing parallelizing compiler to convert sequential code into multi-threaded or vectorized (or even both) code in order to utilize multiple processors simultaneously in a shared-memory multiprocessor (SMP) machine. ... This article or section does not adequately cite its references or sources. ... A system of codes directly understandable by a computers CPU is termed this CPUs native or machine language. ... When generating code for arithmetic expressions, the compiler has to decide which is the best way to translate the expression in terms of number of instructions used as well as number of registers needed to evaluate a certain subtree (especially if free registers are scarce). ... In compiler theory, dependence analysis produces execution-order constraints between statements/instructions. ... Most execution time of a scientific program is spent on loops. ...


In addition, the scope of compiler analysis and optimizations vary greatly, from as small as a basic block to the procedure/function level, or even over the whole program (interprocedural optimization). Obviously, a compiler can potentially do a better job using a broader view. But that broad view is not free: large scope analysis and optimizations are very costly in terms of compilation time and memory space; this is especially true for interprocedural analysis and optimizations. In computing, a basic block is a straight-line piece of code without any jumps or jump targets in the middle; jump targets, if any, start a block, and jumps end a block. ... The objective, as ever, is to have the programme run as swiftly as possible, the problem, as ever, is that it is not possible for a computer programme to analyse a computer programme and always correctly determine what it does. ...


The existence of interprocedural analysis and optimizations is common in modern commercial compilers from HP, IBM, SGI, Intel, Microsoft, and Sun Microsystems. The open source GCC was criticized for a long time for lacking powerful interprocedural optimizations, but it is changing in this respect. Another good open source compiler with full analysis and optimization infrastructure is Open64, which is used by many organizations for research and commercial purposes. The Hewlett-Packard Company (NYSE: HPQ), commonly known as HP, is a very large, global company headquartered in Palo Alto, California, United States. ... For other uses, see IBM (disambiguation) and Big Blue. ... Silicon Graphics, Inc. ... Intel Corporation (NASDAQ: INTC, SEHK: 4335), founded in 1968 as Integrated Electronics Corporation, is an American multinational corporation that is best known for designing and manufacturing microprocessors and specialized integrated circuits. ... Microsoft Corporation, (NASDAQ: MSFT, HKSE: 4338) is a multinational computer technology corporation with global annual revenue of US$44. ... Sun Microsystems, Inc. ... The GNU Compiler Collection (usually shortened to GCC) is a set of programming language compilers produced by the GNU Project. ... Open64 is an open source, state-of-art, optimizing compiler for Intel Itanium platform. ...


Due to the extra time and space needed for compiler analysis and optimizations, some compilers skip them by default. Users have to use compilation options to explicitly tell the compiler which optimizations should be enabled.


Related techniques

Assembly language is not a high-level language and a program that compiles it is more commonly known as an assembler, with the inverse program known as a disassembler. An assembly language is a low-level language for programming computers. ... A disassembler is a computer program that translates machine language into assembly language — the inverse operation to that of an assembler. ...


A program that translates from a low level language to a higher level one is a decompiler. A decompiler is the name given to a computer program that performs the reverse operation to that of a compiler. ...


A program that translates between high-level languages is usually called a language translator, source to source translator, language converter, or language rewriter. The last term is usually applied to translations that do not involve a change of language. Rewriting in mathematics, computer science and logic covers a wide range of non-deterministic methods of replacing subterms of a formula with other terms. ...


See also

This page is dedicated to list all current compilers, compiler generators, interpreters, translators, etc. ... In computer science, abstract interpretation is a theory of sound approximation of the semantics of computer programs, based on monotonic functions over ordered sets, especially lattices. ... This article is in need of attention from an expert on the subject. ... Bottom-up parsing is a strategy for analyzing unknown data relationships that attempts to identify the most fundamental units first, and then to infer higher-order structures from them. ... In computer science, an error avalanche is the mechanism by which a small problem can become compounded until it eventually becomes a very large one. ... For other uses, see Just In Time. ... Figure of the linking process, where object files and static libraries are assembled into a new library or executable. ... This is a list of important publications in computer science, organized by field. ... Metacompilation is a computation which involves metasystem transitions (MST) from a computing machine M to a metamachine M which controls, analyzes and imitates the work of M. Semantics-based program transformation, such as partial evaluation and supercompilation (SCP), is metacomputation. ... A semantics encoding is a translation between formal languages. ...

Notes

  1. ^ IP: "The World's First COBOL Compilers" -- 12 June 1997
  2. ^ T. Hart and M. Levin "The New Compiler", AIM-39 CSAIL Digital Archive - Artificial Intelligence Laboratory Series
  3. ^ "The PL/0 compiler/interpreter"
  4. ^ Book description at the ACM Digital Library

References

  • Compiler textbook references A collection of references to mainstream Compiler Construction Textbooks
  • Compilers: Principles, Techniques and Tools by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman (ISBN 0-201-10088-6) link to publisher. Also known as 'The Dragon Book'.
  • Advanced Compiler Design and Implementation by Steven Muchnick (ISBN 1-55860-320-4).
  • Engineering a Compiler by Keith D. Cooper and Linda Torczon . Morgan Kaufmann 2004, ISBN 1-55860-699-8.
  • Understanding and Writing Compilers: A Do It Yourself Guide (ISBN 0-333-21732-2) by Richard Bornat A version of the book.
  • An Overview of the Production Quality Compiler-Compiler Project by Leverett, Cattel, Hobbs, Newcomer, Reiner, Schatz and Wulf. Computer 13(8):38-49 (August 1980)
  • Compiler Construction by Niklaus Wirth (ISBN 0-201-40353-6) Addison-Wesley 1996, 176 pages, [1].
  • "Programming Language Pragmatics" by Michael Scott (ISBN 0-12-633951-1) Morgan Kaufmann 2005, 2nd edition, 912 pages. the author's site.
  • "A History of Language Processor Technology in IBM", by F.E. Allen, IBM Journal of Research and Development, v.25, no.5, September 1981.

Dr. Alfred V. Aho is a computer scientist. ... Ravi Sethi (born 1947 is an Indian computer scientist retired from Bell Labs and now president of [Avaya Labs Research]. He is best known as one of three authors of the classic computer science textbook Compilers: Principles, Techniques and Tools, also known as the Dragon Book. ... Jeffrey D. Ullman (born November 22, 1942) is a renowned computer scientist. ... Steven Stanley Muchnick is a noted researcher in the field of computer science. ... Richard Bornat (born 1944), is a noted author and researcher in the field of computer science. ... Niklaus E. Wirth (born February 15, 1934) is a Swiss computer scientist, best known for designing several programming languages, including Pascal, and for pioneering several classic topics in software engineering. ...

External links

Look up compiler in
Wiktionary, the free dictionary.
Wikibooks
Wikibooks has a book on the topic of
Wiktionary (a portmanteau of wiki and dictionary) is a multilingual, Web-based project to create a free content dictionary, available in over 151 languages. ... Image File history File links Wikibooks-logo-en. ... Wikibooks logo Wikibooks, previously called Wikimedia Free Textbook Project and Wikimedia-Textbooks, is a wiki for the creation of books. ...

  Results from FactBites:
 
Crossword Compiler: Crossword Puzzle Maker Software (299 words)
As a teacher I use it at least a couple of times a week and the kids I teach love the crosswords.
Crossword Compiler has everything you need to create great educational, professional, and fun puzzles.
Crossword Compiler is the professional constructor's program of choice.
What is compiler? - A Word Definition From the Webopedia Computer Dictionary (360 words)
The compiler derives its name from the way it works, looking at the entire piece of source code and collecting and reorganizing the instructions.
In effect, the compiler is the language, because it defines which instructions are acceptable.
Because compilers translate source code into object code, which is unique for each type of computer, many compilers are available for the same language.
  More results at FactBites »

 
 

COMMENTARY     


Share your thoughts, questions and commentary here
Your name
Your comments

Want to know more?
Search encyclopedia, statistics and forums:

 


Press Releases |  Feeds | Contact
The Wikipedia article included on this page is licensed under the GFDL.
Images may be subject to relevant owners' copyright.
All other elements are (c) copyright NationMaster.com 2003-5. All Rights Reserved.
Usage implies agreement with terms, 1022, m