Home > Store > Programming > Java

larger cover

Add To My Wish List

Register your product to gain access to bonus material or receive a coupon.

Building Parsers With Java™

Book

  • Your Price: $39.99
  • List Price: $49.99
  • Usually ships in 24 hours.
  • About
  • Description
  • Downloads
  • Extras
  • Sample Content
  • Updates

Features

  • Copyright 2001
  • Dimensions: 7-3/8x9-1/4
  • Pages: 400
  • Edition: 1st
  • Book
  • ISBN-10: 0-201-71962-2
  • ISBN-13: 978-0-201-71962-8

Parser building is a powerful programming technique that opens a world of opportunity for designing how users interact with applications. By creating mini-languages, you can precisely address the requirements of your application development domain. Writing your own parsers empowers you to access a database more effectively than SQL to efficiently control the movement of an order through its workflow, to command the actions of a robot, and to control access privileges to transactions in a system. The repertoire of today's professional programmer should include the know-how to create custom languages.

Building Parsers with Java™ shows how to create parsers that recognize custom programming languages. This book and its accompanying CD provide an in-depth explanation and clearly written tutorial on writing parsers, following the Interpreter Design Pattern. An easy-to-follow demonstration on how to apply parsers to vital development tasks is included, using more than a hundred short examples, numerous UML diagrams, and a pure Java parser toolkit to illustrate key points.

You will learn
  • How to design, code, and test a working parser
  • How to create a parser to read a data language, and how to create new computer languages with XML
  • How to translate the design of a language into code
  • How to accept an arithmetic formula and compute its result
  • How to accept and apply matching expressions like th* one
  • How to use tokenizers to define a parser in terms of logical nuggets instead of individual characters
  • How to build parsers for a custom logic language like Prolog
  • How to build parsers for a custom query language that goes beyond SQL
  • How to construct an imperative language that translates text into commands that direct a sequence of actions


0201719622B04062001

Related Article

Regular Expressions Do Not Solve All Problems

Author's Site

Click below for Web Resources related to this title:
Author's Web Site

Downloadable Sample Chapter

Click below for Sample Chapter related to this title:
metskch1.pdf

metskch2.pdf

metskch3.pdf

Table of Contents

(NOTE: Each chapter concludes with a Summary.)

Foreword.


Preface.

Who Should Read This Book.

Using the Toolkit Code and the Sample Code.

Contents of the CD.

Applying the Code on the CD.

Hello World.

Coding Style.

Related Books.

Theoretical Context.

Yacc and Lex and Bison and Flex.

About the Cover.

Acknowledgments.



1. Introduction.

The Role of Parsers.

What Is a Language?

The Organization of This Book.



2. The Elements of a Parser.

What Is a Parser?

Parser Collaborations.

Assemblies.

The Assembly Class Interfaces.

Token and Character Assemblies.

Tokenizing.

Default and Custom Tokenization.

Assembly Appearance.

Assembly Summary.

The Parser Hierarchy.

The Composition of a Parser.

Terminal Parsers.

Using Terminals.

Word Terminals.

Num Terminals.

Literals.

Caseless Literals.

Symbols.

Quoted Strings.

Composite Parsers.

Repetition.

Alternation and Sequence.

Composing a Parser.

The Empty Parser.

Parser Summary.

Assemblers.

Parsers Use Assemblers.

Assemblers Work On Assemblies.

Elements Above.



3. Building a Parser.

Design Overview.

Deciding to Tokenize.

Designing Assemblers.

The Collaboration of Parsers, Assemblers, and Assemblies.

Using an Assembly's Stack.

Assemblers Plug In to Parser Composites.

A Language to Plug In To: Minimath.

Calculating a Minimath Result.

The Minimath Parser as an Object.

Building a Target.

Making a Target Cloneable.

Grammars: A Shorthand for Parsers.

Standard Grammar Shorthand.

Top-Down Grammar Design.

Example: Designing a Grammar for a Track Robot.

A Track Robot Grammar.

Checking for Left Recursion and Cycles.

Translating a Grammar to Code.

Translate Quoted Strings.

Translate Sequences.

Translate Alternations.

Translate Terminals.

Create a Subparser for Each Rule.

Option 1: Declare Each Subparser.

Option 2: Arrange Subparsers as Methods.

Add a Start Method.

Completing a Parser.

Control Pushing.

Design the Target.

Plug In Assemblers.



4. Testing a Parser.

Feature Testing.

Random Testing.

Ambiguity Testing.

Terminal Ambiguity.

Special Tokenizers and Targets.



5. Parsing Data Languages.

The Role of Data Languages.

A Data Language Example.

A Coffee Grammar.

A Tokenizing Problem.

Coffee Assemblers.

Coffee Assembler Code.

Translating the Coffee Grammar to Code.

Data Language Parser Summary.

Parsers with XML.

A Brief History of XML.

The Evolution of XML.

An XML Example.

Helpers.

ShowCoffeeXML.



6. Transforming a Grammar.

The Role of Grammar Transformation.

Ensuring Correct Associativity.

Eliminating Left Recursion.

An Algorithm.

Ensuring Proper Precedence.

Eliminating Parser Class Loops.



7. Parsing Arithmetic.

Building an Arithmetic Parser.

Conventional Symbols.

Conventional Precedence.

Conventional Associativity.

An Arithmetic Grammar.

Arithmetic Assemblers.

Assembler Code.

An Arithmetic Grammar Parser.



8. Parsing Regular Expressions.

The Role of Regular Expressions.

Building a Regular Expression Parser.

A Regular Expression Grammar.

Regular Expression Assemblers.

Assembler Code.

A Regular Expression Parser.



9. Advanced Tokenizing.

The Role of a Tokenizer.

Acquiring a Tokenizer.

Tokenizers in Standard Java.

A Token Class.

A Tokenizer Class.

Tokenizer Lookup Tables.

Tokenizer States.

QuoteState.

NumberState.

SlashState.

SymbolState.

WhitespaceState.

WordState.

Setting a Tokenizer's Source.

Customizing a Tokenizer.

The TokenStringSource Utility.

Customizing a State.

Changing Which State the Tokenizer Enters.

Adding a State.

Token Strings.



10. Matching Mechanics.

Introduction.

Parser Matching.

Repetition Matching.

Collection Parsers.

Sequence Matching.

Alternation Matching.

Empty Matching.

Terminal Matching.

Token Terminals.

Character Terminals.

Terminals Summary.

Parser Matching Utilities.



11. Extending the Parser Toolkit.

The Role of New Types of Parsers.

New Terminals.

New Token Types.

New Parser Features.

An Error-Handling Parser.

Tracks in Action.



12. Engines.

Engines versus Interpreters.

The Role of Engines.

Building Blocks.

Structures.

Variables.

Unification.

Facts.

Programs and Queries.

Proofs.

Backtracking.

Rules.

Additional Features of the Engine.

Comparisons.

Arithmetic.

Evaluation.

Not.

Anonymous Variables.

Lists.



13. Logic Programming.

The Role of Logic Languages.

Building Blocks.

Structures.

Variables.

A Logikus Interactive Development Environment.

Unification.

Comparisons.

Rules, Axioms, and Programs.

Proofs.

Variable Scope.

Variable Joins.

Backtracking.

Looping and Halting.

Gateways.

Additional Features of Logikus.

Comments.

Evaluations.

Negation.

Not Dangerous.

Anonymous Variables.

Lists.

Dot Notation.

List Applications.

Member.

Prefix.

Suffix.

Permutation.

Modeling Transitive and Symmetric Relations.

Symmetric Relations.

Example Applications.

An Authorization Program.

Epidemic.

Generate and Test.

Generate and Test in Java.

Altitude Bands.



14. Parsing a Logic Language.

Building a Logic Language Environment.

A Logikus Grammar.

Comments in Logikus.

Logikus Programs.

Logikus Assemblers.

The Logikus Interactive Development Environment.

A Facade for Logikus.



15. Parsing a Query Language.

The Role of Query Languages.

A Sample Database.

Facts, Objects, and Rows.

Jaql.

Jaql Syntax.

Jaql Joins.

Jaql Expressions.

Building a Query Language Environment.

Translating User Queries to Engine Queries.

Natural Joins.

Where Clauses.

Projection.

A Query Builder.

A Speller.

Jaql Grammar.

Creating the Jaql Parser.

Jaql Assemblers.

The Jaql User Environment.

Exception Handling.

Tracks.

Handling Abject Failure.



16. Parsing an Imperative Language.

The Role of Imperative Languages.

Sling.

Sling Programming.

A Basic Sling.

Adding Slings.

Plotting Time.

Line Effects.

Adding Lines.

Cartesian Plots.

Cartesians as Points.

Polar Plots.

For Loops.

Sliders.

A Composite Example.

More Plots.

The Elements of Sling>

Building the Sling Environment.

Building Commands.

A Command Example.

AssignmentCommand.

CommandSequence.

ForCommand.

IfCommand.

NullCommand.

PrintlnCommand.

ReadCommand.

WhileCommand.

Commands Summary.

Sling Commands.

AddFunctionCommand.

AssignFunctionCommand.

Building Runtime Functions.

Function Wrapping.

Umbrella Types.

Runtime Functions in Sling.

Execution Phases.

Prototyping.

Function Evaluation.

Sling Functions.

SlingFunction.

Abs, Ceil, Cos, Floor, Sin, and Tan.

Arithmetic.

Cartesian.

Point.

Polar.

Random.

Scale.

Sling.

Slider.

T.

Variable.

Sling Target.

A Sling Grammar.

Sling Assemblers.

AssignmentAssembler.

ForAssembler.

FunctionAssembler.

NegativeAssembler.

NumAssembler.

PiAssembler.

PlotAssembler.

ScaleAssembler.

SliderAssembler.

VariableAssembler.

A Sling Parser.

Reserved Words.

Assembler Placement.



17. Directions.

Get Started.

Get the Most Out of This Book.

Other Essential Reading.

Keep Going.

Create New Languages for Your Colleagues.

Create New Languages for Children.

Explore Languages as Human Interfaces.

Improve Languages as Receptacles for Human Thought.

Choose Your Own Direction.



Appendix A: UML Twice Distilled.

Classes.

Class Relationships.

Interfaces.

Objects.



References.


Index.

Preface

The premise of this book is that by learning how to work with parsers, you can create new computer languages that exactly fit your domain. When you create a language, you give your language users a new way to control their computers. By learning about parsers, you learn to define the way your users interact with computers using text.

Who Should Read This Book

This book assumes you have a good understanding of Java and would like to learn how to do the following:
  • Use a handful of tools to create new computer languages quickly.
  • Translate the design of a language into code.
  • Create new computer languages with Extensible Markup Language (XML).
  • Accept an arithmetic formula from your user and compute its result.
  • Accept and apply matching expressions such as th* one.
  • Create query languages that fire an engine.
  • Program in logic and create a logic language parser.
  • Make rules-based programming available to your users from within a Java application.
  • Program in Sling, a new computer language that plots the path of a sling.
  • Create computer languages that fill niches in the work you do.

Using the Toolkit Code and the Sample Code

This book comes with a CD that contains all the code.

Contents of the CD

The CD includes all the code of the fundamental parser classes, the logic engine, and all the examples. The CD also contains the javadoc documentation from the code, which explains class by class how the code works.

Applying the Code on the CD

The code on the CD is free. It is copyrighted, so you may not claim that you wrote it. Otherwise, you may use the code as you wish.

Hello World

The following program is a sufficient test to verify that you can use the code from the CD. Load the code from the CD into your development environment. Type in the following program, or load it from ShowHello.java on the CD.

package sjm.examples.preface;  import sjm.parse.*; import sjm.parse.tokens.*;   public class ShowHello {   public static void main(String args) {     Terminal t   = new Terminal();     Repetition r = new Repetition(t);          Assembly in  = new TokenAssembly("Hello world!");     Assembly out = r.completeMatch(in);          System.out.println(out.getStack()); } } 

Compiling and running this class prints the following:

Hello, world, !

Once you get this running in your environment, you will be able to use all the fundamental classes and all the examples in this book.

Coding Style

Some features of the coding style in this book may seem unusual. First, this book does not indent method signatures. This practice stems from the fact that the VisualAge development environment exports classes this way, resulting in a pair of curly braces at the end of a class. This convention has the happy effect of allowing a little more space before statements are wrapped within the narrow margins of this book.

Another feature of the coding style in this book that may give you pause is the use of extremely short variable names. Methods in this book nearly always perform a single service and thus are short. Temporary variables are never far from their declarations, and there is usually no need for names longer than one character. For example, it is not difficult in the preceding program to discern that the variable t refers to a Terminal object. In the rare event that two variables of a given type occur in one method, they receive meaningful names, such as in and out in the preceding example.

Comments in the code use javadoc tags such as @param and @exception, but the text usually omits these to save space. Comments for public methods begin with

FREE

ONE MONTH ACCESS!

WITH PURCHASE


Get unlimited 30-day access to thousands of Books & Training Videos about technology, professional development and digital media If you continue your subscription after your 30-day trial, you can receive 30% off a monthly subscription to the Safari Library for up to 12 months.