Résumé
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
The CD contains all of the examples and the parser toolkit, including more than three hundred Java classes and their corresponding javadoc. The CD also provides example programs for the new logic, query, and imperative languages that this book introduces.
With the information, methods, and tools in this book/CD package, you can create new computer languages that exactly fit your domain. You can nestle a new language into any niche, defining how your users interact with computers.
Contents
(NOTE: Each chapter concludes with a
Summary.)
Foreword.
Preface.
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.
What Is a Language?
The Organization of This Book.
2. The Elements of 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.
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.
Random Testing.
Ambiguity Testing.
Terminal Ambiguity.
Special Tokenizers and Targets.
5. Parsing 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.
Ensuring Correct Associativity.
Eliminating Left Recursion.
An Algorithm.
Ensuring Proper Precedence.
Eliminating Parser Class Loops.
7. Parsing Arithmetic.
Conventional Symbols.
Conventional Precedence.
Conventional Associativity.
An Arithmetic Grammar.
Arithmetic Assemblers.
Assembler Code.
An Arithmetic Grammar Parser.
8. Parsing Regular Expressions.
Building a Regular Expression Parser.
A Regular Expression Grammar.
Regular Expression Assemblers.
Assembler Code.
A Regular Expression Parser.
9. Advanced Tokenizing.
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.
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.
New Terminals.
New Token Types.
New Parser Features.
An Error-Handling Parser.
Tracks in Action.
12. Engines.
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.
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.
A Logikus Grammar.
Comments in Logikus.
Logikus Programs.
Logikus Assemblers.
The Logikus Interactive Development Environment.
A Facade for Logikus.
15. Parsing a Query Language.
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.
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 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.
Class Relationships.
Interfaces.
Objects.
References.
Index.
L'auteur - Steven John Metsker
Steven John Metsker is a researcher and author who
explores and writes about ways to expand the abilities of
developers. Steve's published work includes articles that
explain how to maintain relational integrity in object
models, how to solve logic puzzles in Java, and how the
conception of "object" differs between Plato and the OO
languages.
Caractéristiques techniques
PAPIER | |
Éditeur(s) | Addison Wesley |
Auteur(s) | Steven John Metsker |
Parution | 01/05/2001 |
Nb. de pages | 372 |
Format | 18,7 x 23,3 |
Couverture | Broché |
Poids | 624g |
Intérieur | Noir et Blanc |
EAN13 | 9780201719628 |
Avantages Eyrolles.com
Consultez aussi
- Les meilleures ventes en Graphisme & Photo
- Les meilleures ventes en Informatique
- Les meilleures ventes en Construction
- Les meilleures ventes en Entreprise & Droit
- Les meilleures ventes en Sciences
- Les meilleures ventes en Littérature
- Les meilleures ventes en Arts & Loisirs
- Les meilleures ventes en Vie pratique
- Les meilleures ventes en Voyage et Tourisme
- Les meilleures ventes en BD et Jeunesse