Written by the creator of the Unicon programming language, this book will show you how to implement programming languages to reduce the time and cost of creating applications for new or specialized areas of computing
Key Features
- Reduce development time and solve pain points in your application domain by building a custom programming language
- Learn how to create parsers, code generators, file readers, analyzers, and interpreters
- Create an alternative to frameworks and libraries to solve domain-specific problems
Book Description
The need for different types of computer languages is growing rapidly and developers prefer creating domain-specific languages for solving specific application domain problems. Building your own programming language has its advantages. It can be your antidote to the ever-increasing size and complexity of software.
In this book, you’ll start with implementing the frontend of a compiler for your language, including a lexical analyzer and parser. The book covers a series of traversals of syntax trees, culminating with code generation for a bytecode virtual machine. Moving ahead, you’ll learn how domain-specific language features are often best represented by operators and functions that are built into the language, rather than library functions. We’ll conclude with how to implement garbage collection, including reference counting and mark-and-sweep garbage collection. Throughout the book, Dr. Jeffery weaves in his experience of building the Unicon programming language to give better context to the concepts where relevant examples are provided in both Unicon and Java so that you can follow the code of your choice of either a very high-level language with advanced features, or a mainstream language.
By the end of this book, you’ll be able to build and deploy your own domain-specific languages, capable of compiling and running programs.
What you will learn
- Perform requirements analysis for the new language and design language syntax and semantics
- Write lexical and context-free grammar rules for common expressions and control structures
- Develop a scanner that reads source code and generate a parser that checks syntax
- Build key data structures in a compiler and use your compiler to build a syntax-coloring code editor
- Implement a bytecode interpreter and run bytecode generated by your compiler
- Write tree traversals that insert information into the syntax tree
- Implement garbage collection in your language
Who this book is for
This book is for software developers interested in the idea of inventing their own language or developing a domain-specific language. Computer science students taking compiler construction courses will also find this book highly useful as a practical guide to language implementation to supplement more theoretical textbooks. Intermediate-level knowledge and experience working with a high-level language such as Java or the C++ language are expected to help you get the most out of this book.
Table of Contents
- Why Build Another Programming Language
- Programming Language Design
- Scanning Source Code
- Parsing
- Syntax Trees
- Symbol Tables
- Checking Base Types
- Checking Types on Arrays, Method Calls, and Structure Accesses
- Intermediate Code Generation
- Syntax Cloning in an IDE
- Bytecode Interpreters
- Generating Bytecode
- Native Code Generation
- Implementing Operators and Built-In Functions
- Domain Control Structures
- Garbage Collection
- Final Thoughts
- Appendix A – Unicon Essentials
The first section builds the architecture, constructs the syntax tree, establishes commands, and explores the basic parameters from UFlex, JFlex and JZero. Also included is an excellent section on working with regex to set up key rules. The second section then moves into how to make commands work through your syntax tree, constructing the traversal, building cases and methods, and making use of unique libraries to improve actions. As a bonus, Jeffrey includes an excellent section on building, coloring and parsing your own IDE.
Finally, the book explores bytecode interpreters, taking your language down to machine code to make sure the interpretation is correct. This expands in building operators within Unicon, the language Jeffrey chooses to improve and builds domain control structures to scan and render graphics for your applications. Not neglected is the ability to remove the garbage, find those areas no longer needed, cleaning data and focus on maximizing the memory storage you need for operations. The book also includes an excellent appendix on Unicon.
A great book, detailed and extensive. If your language is falling behind, or your favorite tools are no longer supported, this will get you where you need to be. I make sure to chunk a good number of hours once you start, as none of these options are simple. Though starting with the basics, expect to spend a good deal of time working with your architecture and syntax to make it run correctly. Maybe, if you spend the right amount of time, your language can be the next Go, Ruby or another format the next generation of programmers needs to succeed.