![]() |
![]() |
Your cart is empty |
||
Books > Computing & IT > Computer programming > Compilers & interpreters
This monograph is concerned with the problem of getting computers to transform formal language definitions into compilers. Its purpose is to demonstrate how certain simple theoretical ideas can be used to generate compilers and even compiler generators. As the title suggests, a realistic assessment of the relationship between the complexity of realistic compilation and the relative simplicity studied in theoretical work is attempted. The monograph contains an overview of existing compiler generators. The CERES '83 compiler generator, developed by Neil D. Jones and the author, is described in detail. The CERES system is based on the idea of composing language definitions and it serves as an example of a powerful novel "bootstrapping" technique by which one can generate compiler generators as well as compilers by considering a compiler generator to be, in a sense which is made mathematically precise, a special kind of compiler. The core of the CERES system is a two-page-long machine generated compiler generator. The approach uses ideas from denotational semantics and many-sorted algebra and connects them with novel ideas about how to treat programs and language definitions as data. Considerable effort has been made to present the necessary theory in a manner suitable for readers who have some practical experience but not necessarily a theoretical background in semantics.
This book is the first comprehensive survey of the field of constraint databases, written by leading researchers. Constraint databases are a fairly new and active area of database research. The key idea is that constraints, such as linear or polynomial equations, are used to represent large, or even infinite, sets in a compact way. The ability to deal with infinite sets makes constraint databases particularly promising as a technology for integrating spatial and temporal data with standard relational databases. Constraint databases bring techniques from a variety of fields, such as logic and model theory, algebraic and computational geometry, as well as symbolic computation, to the design and analysis of data models and query languages.
Loop tiling, as one of the most important compiler optimizations, is beneficial for both parallel machines and uniprocessors with a memory hierarchy. This book explores the use of loop tiling for reducing communication cost and improving parallelism for distributed memory machines. The author provides mathematical foundations, investigates loop permutability in the framework of nonsingular loop transformations, discusses the necessary machineries required, and presents state-of-the-art results for finding communication- and time-minimal tiling choices. Throughout the book, theorems and algorithms are illustrated with numerous examples and diagrams. The techniques presented in Loop Tiling for Parallelism can be adapted to work for a cluster of workstations, and are also directly applicable to shared-memory machines once the machines are modeled as BSP (Bulk Synchronous Parallel) machines. Features and key topics: Detailed review of the mathematical foundations, including convex polyhedra and cones; Self-contained treatment of nonsingular loop transformations, code generation, and full loop permutability; Tiling loop nests by rectangles and parallelepipeds, including their mathematical definition, dependence analysis, legality test, and code generation; A complete suite of techniques for generating SPMD code for a tiled loop nest; Up-to-date results on tile size and shape selection for reducing communication and improving parallelism; End-of-chapter references for further reading. Researchers and practitioners involved in optimizing compilers and students in advanced computer architecture studies will find this a lucid and well-presented reference work with numerous citations to original sources.
Knowing how to create domain-specific languages (DSLs) can give you a huge productivity boost. Instead of writing code in a general-purpose programming language, you can first build a custom language tailored to make you efficient in a particular domain. The key is understanding the common patterns found across language implementations. "Language Design Patterns" identifies and condenses the most common design patterns, providing sample implementations of each. The pattern implementations use Java, but the patterns themselves are completely general. Some of the implementations use the well-known ANTLR parser generator, so readers will find this book an excellent source of ANTLR examples as well. But this book will benefit anyone interested in implementing languages, regardless of their tool of choice. Other language implementation books focus on compilers, which you rarely need in your daily life. Instead, "Language Design Patterns" shows you patterns you can use for all kinds of language applications. You'll learn to create configuration file readers, data readers, model-driven code generators, source-to-source translators, source analyzers, and interpreters. Each chapter groups related design patterns and, in each pattern, you'll get hands-on experience by building a complete sample implementation. By the time you finish the book, you'll know how to solve most common language implementation problems.
This classroom-tested and clearly-written textbook presents a focused guide to the conceptual foundations of compilation, explaining the fundamental principles and algorithms used for defining the syntax of languages, and for implementing simple translators. This significantly updated and expanded third edition has been enhanced with additional coverage of regular expressions, visibly pushdown languages, bottom-up and top-down deterministic parsing algorithms, and new grammar models. Topics and features: describes the principles and methods used in designing syntax-directed applications such as parsing and regular expression matching; covers translations, semantic functions (attribute grammars), and static program analysis by data flow equations; introduces an efficient method for string matching and parsing suitable for ambiguous regular expressions (NEW); presents a focus on extended BNF grammars with their general parser and with LR(1) and LL(1) parsers (NEW); introduces a parallel parsing algorithm that exploits multiple processing threads to speed up syntax analysis of large files; discusses recent formal models of input-driven automata and languages (NEW); includes extensive use of theoretical models of automata, transducers and formal grammars, and describes all algorithms in pseudocode; contains numerous illustrative examples, and supplies a large set of exercises with solutions at an associated website. Advanced undergraduate and graduate students of computer science will find this reader-friendly textbook to be an invaluable guide to the essential concepts of syntax-directed compilation. The fundamental paradigms of language structures are elegantly explained in terms of the underlying theory, without requiring the use of software tools or knowledge of implementation, and through algorithms simple enough to be practiced by paper and pencil.
This fourth Edition presents new examples on submodules, derived type i/o, object oriented programming, abstract interfaces and procedure pointers, C interop, sorting and searching, statistics and converting to more modern versions of Fortran. Key Features Highlights the core language features of modern Fortran including data typing, array processing, control structures, functions, subroutines, modules and submodules, user defined types, pointers, operator overloading, generic programming, parallel programming, abstract interfaces, procedure pointers Pinpoints common problems that occur when programming Illustrates the use of several compilers Introduction to Programming with Fortran has been written for the complete beginner with little or no programming background as well as existing Fortran programmers and those with programming experience in other languages
Compilers: Principles, Techniques and Tools, known to professors, students, and developers worldwide as the Dragon Book, is available in a new edition. Every chapter has been completely revised to reflect developments in software engineering, programming languages, and computer architecture that have occurred since 1986, when the last edition published. The authors, recognizing that few readers will ever go on to construct a compiler, retain their focus on the broader set of problems faced in software design and software development. New chapters include: Chapter 10 Instruction-Level Parallelism Chapter 11 Optimizing for Parallelism and Locality Chapter 12 Interprocedural
This book provides readers with a single-source reference to static-single assignment (SSA)-based compiler design. It is the first (and up to now only) book that covers in a deep and comprehensive way how an optimizing compiler can be designed using the SSA form. After introducing vanilla SSA and its main properties, the authors describe several compiler analyses and optimizations under this form. They illustrate how compiler design can be made simpler and more efficient, thanks to the SSA form. This book also serves as a valuable text/reference for lecturers, making the teaching of compilers simpler and more effective. Coverage also includes advanced topics, such as code generation, aliasing, predication and more, making this book a valuable reference for advanced students and practicing engineers.
Access the power of bare-metal systems programming with Scala Native, an ahead-of-time Scala compiler. Without the baggage of legacy frameworks and virtual machines, Scala Native lets you re-imagine how your programs interact with your operating system. Compile Scala code down to native machine instructions; seamlessly invoke operating system APIs for low-level networking and IO; control pointers, arrays, and other memory management techniques for extreme performance; and enjoy instant start-up times. Skip the JVM and improve your code performance by getting close to the metal. Developers generally build systems on top of the work of those who came before, accumulating layer upon layer of abstraction. Scala Native provides a rare opportunity to remove layers. Without the JVM, Scala Native uses POSIX and ANSI C APIs to build concise, expressive programs that run unusually close to bare metal. Scala Native compiles Scala code down to native machine instructions instead of JVM bytecode. It starts up fast, without the sluggish warm-up phase that's common for just-in-time compilers. Scala Native programs can seamlessly invoke operating system APIs for low-level networking and IO. And Scala Native lets you control pointers, arrays, and other memory layout types for extreme performance. Write practical, bare-metal code with Scala Native, step by step. Understand the foundations of systems programming, including pointers, arrays, strings, and memory management. Use the UNIX socket API to write network client and server programs without the sort of frameworks higher-level languages rely on. Put all the pieces together to design and implement a modern, asynchronous microservice-style HTTP framework from scratch. Take advantage of Scala Native's clean, modern syntax to write lean, high-performance code without the JVM. What You Need: A modern Windows, Mac OS, or Linux system capable of running Docker. All code examples in the book are designed to run on a portable Docker-based build environment that runs anywhere. If you don't have Docker yet, see the Appendix for instructions on how to get it.
This book provides a high-level description, together with a mathematical and an experimental analysis, of Java and of the Java Virtual Machine (JVM), including a standard compiler of Java programs to JVM code and the security critical bytecode verifier component of the JVM. The description is structured into language layers and machine components. It comes with a natural executable refinement (written in AsmGofer and provided on CD ROM) which can be used for testing code. The method developed for this purpose is based on Abstract State Machines (ASMs) and can be applied to other virtual machines and to other programming languages as well. The book is written for advanced students and for professionals and practitioners in research and development who need a complete and transparent definition and an executable model of the language and of the virtual machine underlying its intended implementation.The CD ROM contains the entire text of the book and numerous examples and exercises.
Write code that writes code with Elixir macros. Macros make metaprogramming possible and define the language itself. In this book, you'll learn how to use macros to extend the language with fast, maintainable code and share functionality in ways you never thought possible. You'll discover how to extend Elixir with your own first-class features, optimize performance, and create domain-specific languages. Metaprogramming is one of Elixir's greatest features. Maybe you've played with the basics or written a few macros. Now you want to take it to the next level. This book is a guided series of metaprogramming tutorials that take you step by step to metaprogramming mastery. You'll extend Elixir with powerful features and write faster, more maintainable programs in ways unmatched by other languages. You'll start with the basics of Elixir's metaprogramming system and find out how macros interact with Elixir's abstract format. Then you'll extend Elixir with your own first-class features, write a testing framework, and discover how Elixir treats source code as building blocks, rather than rote lines of instructions. You'll continue your journey by using advanced code generation to create essential libraries in strikingly few lines of code. Finally, you'll create domain-specific languages and learn when and where to apply your skills effectively. When you're done, you will have mastered metaprogramming, gained insights into Elixir's internals, and have the confidence to leverage macros to their full potential in your own projects.
Designed as a self-study guide, the book describes the real-world tradeoffs encountered in building a production-quality, platform-retargetable compiler. The authors examine the implementation of lcc, a production-quality, research-oriented retargetable compiler, designed at AT&T Bell Laboratories for the ANSI C programming language. The authors' innovative approach-a "literate program" that intermingles the text with the source code-uses a line-by-line explanation of the code to demonstrate how lcc is built.
Learn from state-of-the-art examples in robotics, motors, detection filters, chemical processes, aircraft, and spacecraft. With this book you will review contemporary MATLAB coding including the latest MATLAB language features and use MATLAB as a software development environment including code organization, GUI development, and algorithm design and testing. Features now covered include the new graph and digraph classes for charts and networks; interactive documents that combine text, code, and output; a new development environment for building apps; locally defined functions in scripts; automatic expansion of dimensions; tall arrays for big data; the new string type; new functions to encode/decode JSON; handling non-English languages; the new class architecture; the Mocking framework; an engine API for Java; the cloud-based MATLAB desktop; the memoize function; and heatmap charts. MATLAB Recipes: A Problem-Solution Approach, Second Edition provides practical, hands-on code snippets and guidance for using MATLAB to build a body of code you can turn to time and again for solving technical problems in your work. Develop algorithms, test them, visualize the results, and pass the code along to others to create a functional code base for your firm. What You Will Learn Get up to date with the latest MATLAB up to and including MATLAB 2020b Code in MATLAB Write applications in MATLAB Build your own toolbox of MATLAB code to increase your efficiency and effectiveness Who This Book Is For Engineers, data scientists, and students wanting a book rich in examples using MATLAB.
Learn the principles behind object-oriented programming in Ruby and within a few chapters create a fully functional Ruby 3-based application. You'll gain a basic understanding of many ancillary technologies such as databases, XML, web frameworks, and networking - some of which will be needed for your first Ruby application. Based on the bestselling first and second editions, Beginning Ruby 3, 4th Edition is a leading guide to learn Ruby from the ground up. The new edition of this book provides the same excellent introduction to Ruby as the previous editions plus updates for the newest version of Ruby, including performance through an improved allocator, decreased heap fragmentation and more. Also, added: details on the just-in-time compiler, fewer limits on GIL (Global Interpreter Lock), and a static type checker. You'll see why the light and agile Ruby programming language remains a popular open source scripting option for developers building today's web applications. This book can also be used as a textbook or companion to a textbook on beginning Ruby programming. After reading and using this book, you'll have a firm handle to program in the Ruby language. What You Will Learn Discover the fundamentals of Ruby and its object-oriented building blocks Use the Ruby libraries, gems, and documentation Work with files and databases Write and deploy Ruby applications Harness the various Ruby web frameworks and use them effectively Do network programming with Ruby Who This Book Is For Beginning programmers, programmers new to Ruby, and web developers interested in learning the foundations of the Ruby programming language.
Discover a variety of data-mining algorithms that are useful for selecting small sets of important features from among unwieldy masses of candidates, or extracting useful features from measured variables. As a serious data miner you will often be faced with thousands of candidate features for your prediction or classification application, with most of the features being of little or no value. You'll know that many of these features may be useful only in combination with certain other features while being practically worthless alone or in combination with most others. Some features may have enormous predictive power, but only within a small, specialized area of the feature space. The problems that plague modern data miners are endless. This book helps you solve this problem by presenting modern feature selection techniques and the code to implement them. Some of these techniques are: Forward selection component analysis Local feature selection Linking features and a target with a hidden Markov model Improvements on traditional stepwise selection Nominal-to-ordinal conversion All algorithms are intuitively justified and supported by the relevant equations and explanatory material. The author also presents and explains complete, highly commented source code. The example code is in C++ and CUDA C but Python or other code can be substituted; the algorithm is important, not the code that's used to write it. What You Will Learn Combine principal component analysis with forward and backward stepwise selection to identify a compact subset of a large collection of variables that captures the maximum possible variation within the entire set. Identify features that may have predictive power over only a small subset of the feature domain. Such features can be profitably used by modern predictive models but may be missed by other feature selection methods. Find an underlying hidden Markov model that controls the distributions of feature variables and the target simultaneously. The memory inherent in this method is especially valuable in high-noise applications such as prediction of financial markets. Improve traditional stepwise selection in three ways: examine a collection of 'best-so-far' feature sets; test candidate features for inclusion with cross validation to automatically and effectively limit model complexity; and at each step estimate the probability that our results so far could be just the product of random good luck. We also estimate the probability that the improvement obtained by adding a new variable could have been just good luck. Take a potentially valuable nominal variable (a category or class membership) that is unsuitable for input to a prediction model, and assign to each category a sensible numeric value that can be used as a model input. Who This Book Is For Intermediate to advanced data science programmers and analysts.
"It is the first book that I have read that makes STL quickly usable by working programmers" Francis Glassborow, Chair of The Association of C & C++ Users (ACCU) STL for C++ programmers Leen Ammeraal The Standard Template Library (STL) provides many useful and generally applicable programming tools. This book combines reference material and a well-paced tutorial to get you past the basics quickly. Small, complete programs illustrate the key STL features such as containers, algorithms, iterators and function objects. A section is devoted to the new string data type. All STL algorithms are formally presented by their prototypes and then informally described to show how to use them in practice. Concepts are well illustrated with a large number of example programs all of which are available via ftp (for access details please refer to the preface of the book or Wiley’s website). Finally, special examples are given to explain the advanced notions of function objects and function adaptors, including predicates, binders and negators.
Understand and work with the most important features of advanced C# in different programming environments. This book teaches you the fundamental features of advanced C# and how to incorporate them in different programming techniques using Visual Studio 2019. The book is divided into two parts. Part I covers the fundamentals and essentials of advanced programming in C#. You will be introduced to delegates and events and then move on to lambda expressions. Part II teaches you how to implement these features in different programming techniques, starting with generic programming. After that, you will learn about thread programming and asynchronous programming, to benefit from a multi-threaded environment. Finally, you will learn database programming using ADO.NET to connect to a MySQL database and you will know how to exercise SQL statements and stored procedures through your C# applications. What You Will Learn Use delegates, events, and lambda expressions in advanced programming Make your application flexible by utilizing generics Create a fast application with multi-threading and asynchronous programming Work in Visual Studio Community Edition, which is the most common IDE for using C# Understand alternative implementations along with their pros and cons Who This Book Is For Developers and programmers who are already working in C#
This book constitutes the refereed proceedings of the 25th International Static Analysis Symposium, SAS 2018, held in Freiburg, Germany, in August 2018. The 18 papers presented in this volume were carefully reviewed and selected from 37 submissions. The contributions cover a variety of multi-disciplinary topics in abstract domains: program verication, bug detection, compiler optimization, program understanding, and software maintenance.
Learn the basics of the Elm platform for web applications. This book covers the language as of version 0.18 and the most important libraries. After reading this book you will have an understanding what Elm can do for you. Also, you will be able to build on the example in the book to develop advanced web applications with Elm. What You'll Learn: Work with Elm and its development environment Learn the language and libraries in examples Use the Elm architecture to create applications with the Elm platform Put it all together with a sample application and explanation that covers the implementation details Who This Book Is For: Web developers new to Elm, with some experience in JavaScript recommended. This book is also for others curious about Elm and its potential beyond web development.
This book constitutes the refereed post-conference proceedings of the 4th International Workshop on Accelerator Programming Using Directives, WACCPD 2017, held in Denver, CO, USA, in November 2017. The 9 full papers presented have been carefully reviewed and selected from 14 submissions. The papers share knowledge and experiences to program emerging complex parallel computing systems. They are organized in the following three sections: applications; environments; and program evaluation.
Learn programming with Python by creating a text adventure. This book will teach you the fundamentals of programming, how to organize code, and some coding best practices. By the end of the book, you will have a working game that you can play or show off to friends. You will also be able to change the game and make it your own by writing a different story line, including new items, creating new characters, and more. Make your own Python Text Adventure offers a structured approach to learning Python that teaches the fundamentals of the language, while also guiding the development of the customizable game. The first half of the book introduces programming concepts and Python syntax by building the basic structure of the game. You'll also apply the new concepts in homework questions (with solutions if you get stuck!) that follow each chapter. The second half of the book will shift the focus to adding features to your game and making it more entertaining for the player. Python is often recommended as a first programming language for beginners, and for good reason. Whether you've just decided to learn programming or you've struggled before with vague tutorials, this book will help you get started. What You'll Learn Install Python and set up a workspace Master programming basics and best practices including functions, lists, loops and objects Create an interactive adventure game with a customizable world Who This Book Is For People who have never programmed before or for novice programmers starting out with Python.
This book constitutes the proceedings of the 23rd International Conference on Formal Methods for Industrial Critical Systems, FMICS 2018, held in Maynooth, Ireland, in September 2018. The 9 regular papers presented in this volume were carefully reviewed and selected from 17 submissions. The book also contains two invited talks in full-paper length. In addition, there are 8 invited contributions in honor of Susanne Graf (Director of Research at VERIMAG Grenoble, France) on the occasion of her 60th birthday. The aim of the FMICS conference series is to provide a forum for researchers who are interested in the development and application of formal methods in industry. In particular, FMICS brings together scientists and engineers who are active in the area of formal methods and interested in exchanging their experiences in the industrial usage of these methods. The FMICS conference series also strives to promote research and development for the improvement of formal methods and tools for industrial applications.
This book constitutes the proceedings of the 24th International Conference on Compiler Construction, CC 2015, held as part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2015, in London, UK, in April 2015. The 11 papers presented in this volume were carefully reviewed and selected from 34 submissions. They deal with compiler engineering and compiling techniques; compiler analysis and optimisation and formal techniques in compilers. The book also contains one invited talk in full-paper length.
Build domain specific languages (DSLs) using Java's most popular functional programming language: Scala. This book introduces the basics of Scala and DSLs using a series of practical examples. In Practical Scala DSLs, you'll learn to create pragmatic and complete code examples that explain the actual use of DSLs with Scala: a web API and microservices; a custom language; a mobile app; a Forex system; a game; and cloud applications. At the end of this unique book, you'll be able to describe the differences between external and internal DSLs; understand when and how to apply DSLs; create DSLs using Scala; and even create a DSL using another programming language. What You'll Learn Build DSLs in Scala Write a web API and microservices Create a custom language Apply DSLs to mobile apps development, a Forex trading system, game development, and more Discover the role of DSLs in cloud development Integrate DSLs as part of a DevOps program or structure Build internal and external DSLs Who This Book Is For Experienced Java coders with at least some prior experience with Scala. You may be new to DSLs. |
![]() ![]() You may like...
Handbook of Research on Web Log Analysis
Bernard J Jansen, Amanda Spink, …
Hardcover
R7,296
Discovery Miles 72 960
Web Search - Multidisciplinary…
Amanda Spink, Michael Zimmer
Hardcover
R2,922
Discovery Miles 29 220
Emergent Web Intelligence: Advanced…
Youakim Badr, Richard Chbeir, …
Hardcover
R4,644
Discovery Miles 46 440
Semantic Web Services - Advancement…
Brian Blake, Liliana Cabral, …
Hardcover
R2,927
Discovery Miles 29 270
Enabling Semantic Web Services - The Web…
Dieter Fensel, Holger Lausen, …
Hardcover
R1,526
Discovery Miles 15 260
Semantic Web Personalization and Context…
Militiadis Lytras, Patricia Ordonez De Pablos, …
Hardcover
R4,915
Discovery Miles 49 150
|