{[ promptMessage ]}

Bookmark it

{[ promptMessage ]}


010_CS143_Course_Overview - CS143 Summer2011 Handout01...

Info iconThis preview shows pages 1–3. Sign up to view the full content.

View Full Document Right Arrow Icon
CS143 Handout 01 Summer 2011 June 20, 2011 Anatomy of a Compiler Handout written by Maggie Johnson and Julie Zelenski, with edits by Keith. What is a compiler? compiler  is a program that takes as input a program written in one language (the  source  language) and translates it into a functionally equivalent program in another language  (the  target  language).  The source language is usually a high-level language like C++,  Java, Objective C, or C#, and the target language is usually a low-level language like  assembly or machine code.  As it translates, a compiler also reports errors and warnings  to help the programmer make corrections to the source, so the translation can be  completed. Theoretically, the source and target can be any language, but the most  common use of a compiler is translating an ASCII source program written in a language  such as C++ into a machine-specific result like x86 assembly that can execute on that  designated hardware. Although we will focus on writing a compiler for a programming language, the  techniques you learn can be valuable and useful for a wide variety of parsing and  translating tasks: translating  javadoc  comments to HTML, generating a table from the  results of an SQL query, collating responses from e-mail surveys, implementing a server  that responds to a network protocol like  http  or  imap , or "screen scraping" information  from an on-line source.  Your printer uses parsing to render PostScript files.  Hardware  engineers use a full-blown compiler to translate from a hardware description language  to the schematic of a circuit.  Your spam filter most likely scans and parses email content.  The list goes on and on. How does a compiler work? From the diagram on the next page, you can see there are two main stages in the  compiling process:  analysis  and  synthesis .  The analysis stage breaks up the source  program into pieces, and creates a generic (language-independent) intermediate  representation of the program.  Then, the synthesis stage constructs the desired target  program from the intermediate representation.  Typically, a compiler’s analysis stage is  called its  front end  and the synthesis stage its  back end .  Each of the stages is broken down  into a set of "phases" that handle different parts of the tasks.  (Why do you think typical  compilers separate the compilation process into front and back-end phases?)
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
Diagram of the compilation process front-end (analysis) Source  program if (a >= b+1) { a *= 2; } ...
Background image of page 2
Image of page 3
This is the end of the preview. Sign up to access the rest of the document.

{[ snackBarMessage ]}