Compiler Design: Virtual Machines

Compiler Design: Virtual Machines

Language: English

Pages: 187

ISBN: 3642149081

Format: PDF / Kindle (mobi) / ePub


While compilers for high-level programming languages are large complex software systems, they have particular characteristics that differentiate them from other software systems. Their functionality is almost completely well-defined – ideally there exist complete precise descriptions of the source and target languages, while additional descriptions of the interfaces to the operating system, programming system and programming environment, and to other compilers and libraries are often available. The implementation of application systems directly in machine language is both difficult and error-prone, leading to programs that become obsolete as quickly as the computers for which they were developed. With the development of higher-level machine-independent programming languages came the need to offer compilers that were able to translate programs into machine language. Given this basic challenge, the different subtasks of compilation have been the subject of intensive research since the 1950s.

This book is not intended to be a cookbook for compilers, instead the authors' presentation reflects the special characteristics of compiler design, especially the existence of precise specifications of the subtasks. They invest effort to understand these precisely and to provide adequate concepts for their systematic treatment. This is the first book in a multivolume set, and here the authors describe what a compiler does, i.e., what correspondence it establishes between a source and a target program. To achieve this the authors specify a suitable virtual machine (abstract machine) and exactly describe the compilation of programs of each source language into the language of the associated virtual machine for an imperative, functional, logic and object-oriented programming language.

This book is intended for students of computer science. Knowledge of at least one imperative programming language is assumed, while for the chapters on the translation of functional and logic programming languages it would be helpful to know a modern functional language and Prolog. The book is supported throughout with examples, exercises and program fragments.

Haptics: Generating and Perceiving Tangible Sensations: International Conference, EuroHaptics 2010, Amsterdam, July 2010, Proceedings Part 2

Web Data Mining: Exploring Hyperlinks, Contents, and Usage Data (2nd Edition) (Data-Centric Systems and Applications)

A Bug Hunter's Diary: A Guided Tour Through the Wilds of Software Security

Big Data: Principles and best practices of scalable realtime data systems

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Means that the function map can be used for an int function and an int list, as well as for a Boolean function and a list of Boolean values. The type of map only requires that the argument type of the first functional argument agrees with the type of the elements of the second argument, which is a list. The result then has a list type, where the list elements have the type of the result of the functional argument. In the following sections, we present a simple functional fragment F U L of OC AML.

A 63 Formally, the set of free variables, free(e), are defined by induction on the structure of the program expressions e as follows: =∅ (b a basic value) free(b) = { x} (x a variable) free( x) = free(e) free(✷1 e) free(e1 ✷2 e2 ) = free(e1 ) ∪ free(e2 ) free(if e0 then e1 else e2 ) = free(e0 ) ∪ free(e1 ) ∪ free(e2 ) free(e e0 . . . ek−1 ) = free(e ) ∪ free(e0 ) ∪ . . . ∪ free(ek−1 ) free(fun x0 . . . xk−1 → e ) = free(e )\{ x0 , . . . , xk−1 } free(let x = e1 in e0 ) = free(e1 ) ∪ (free(e0.

Instruction can be decomposed into simpler steps: eval = if ( H [ S[ SP]] = (C, _, _)) { mark0; pushloc 3; apply0; } // allocating the stack frame // copying of the references // equivalent apply A closure can be understood as a function without parameters, which therefore does not include the component ap. Evaluating a closure is analogous to evaluating the application of a function with 0 arguments. Let us discuss the different steps of the instruction eval in detail. If the reference at the.

Code for evaluating the expression e directly after the code for constructing the closure. This code refers to the address environment ρ , which records the ordering of the global variables within the global vector. Before discussing the instruction update, we consider an example. Example 3.11.1 Consider the expression e ≡ a ∗ a in the address environment ρ = { a → ( L, 0)} with stack level sl = 1. The call codeC e ρ sl generates the sequence: 1 2 2 2 pushloc 1 mkvec 1 mkclos A jump B 0 1 1 1 2.

Program: let rec x = 1 and f = fun y → x + y + z and z=4 in let rec x = 2 and g = fun y → x + ( f y) + z in let rec x = 3 and f = fun y → y and z=5 in g 6 What is the output of the program a) with static scoping? b) with dynamic scoping? 4. Functional Programming. Implement the following functions in OC AML (alternatively in SML), without using corresponding libraries: • member takes as arguments an element e and a list l and returns whether the element is included in the list. • filter takes as.

Download sample

Download