diff doc/manual/intro.tex @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/intro.tex	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,174 @@
+% This file was converted by WP2LaTeX version 2.99
+% (and modified a lot afterwards)
+
+%\baselineskip=2.00ex
+%
+%\headtext{\evenpages}{
+%\thepage AnaGram User's Guide
+%}
+%\foottext{\allpages}{
+%\strut\hfill \today{}
+%}
+%\headtext{\oddpages}{
+%Chapter 1\hfill Introduction\thepage 
+%}
+%\vspace{2.55cm}%
+%\begin{flushright}
+%
+%\section{{    Chapter 1
+%Introduction to AnaGram}}
+%\end{flushright}
+
+\chapter{Introduction to AnaGram}
+
+AnaGram is a software development tool which brings the power of
+syntax directed parsing to the C or C++ programmer.  AnaGram provides
+a rule-based, non-procedural system for dealing with input to computer
+programs.
+
+AnaGram is a completely new LALR parser generator with a powerful
+notation for representing context free grammars.  A flexible,
+interactive environment combined with powerful debugging capabilities
+and language extensions make it easy to incorporate syntax directed
+parsing in your programs.  AnaGram makes it possible for you to reap
+the benefits of syntax directed parsing on all of your projects, big
+and small.
+
+Syntax directed parsing has long been recognized as the most powerful
+technique available for interpreting program input.  Up to now, the
+tools available to the software developer to support this technique
+have been primitive and hard to use, suitable mainly for compilers and
+other large projects.  AnaGram was specifically designed to make
+syntax directed parsing accessible to the software developer for
+everyday use.
+
+Few portions of a program are more prone to errors than the logic that
+deciphers the input to the program.  To interpret its input a program
+usually needs many flags and switches, many tests, and a lot of
+conditional code.  Of necessity such a program has many paths and many
+opportunities to go awry.  Such code is hard to write, hard to
+document, hard to debug and hard to maintain.
+
+With AnaGram, you can completely separate the analysis of input from
+the processing of data.  Instead of writing a detailed procedure for
+interpreting input, you write a {\it description} of that input using
+an adaptation of 
+% noindex
+Backus-Naur Form, or BNF.
+AnaGram builds for you,
+based on your description, a procedure to interpret your input.  All
+those tests, all that conditional code, all those flags and switches
+vanish.  In a convenient way you can attach, to the procedure, code to
+process the data once it is identified in the input stream.  Your
+input processing now takes on the aspect of a rule-based,
+non-procedural system.
+
+There are many benefits to this approach.  Your program is easier to
+understand.  It is easier to debug.  It is easier to extend and
+maintain.  A large project can be more easily divided up among the
+members of your team.  The description, or grammar, of your input can
+serve as solid and reliable documentation.  You will also find that it
+becomes much easier to re-use code on other projects, because the data
+processing is cleanly separated from the parsing, or input analysis.
+
+These benefits are now available because AnaGram, in addition to
+implementing the basic algorithms of an LALR parser generator,
+provides powerful new features that make syntax directed parsing a
+practical reality.  Here is a summary of some of the more important
+features of AnaGram:
+
+\paragraph{Interactive File Trace.}
+An online 
+% noindex
+\agwindow{File Trace} function lets you run test files through your
+grammar interactively.  You can see how your parser will interpret
+them.  You can see the contents of the parse stack.  You can see the
+grammar rules that are partially matched at any stage in the parse.
+You can back up the parse to any point and try again.  You can go
+through a test file in single step mode, one character at a time, or
+simply parse the whole file to see if it has any errors.  While
+interpreting your grammar and parsing your file, AnaGram will count
+the number of times each grammar rule is matched and give you a report
+so you can assess the thoroughness of your testing.
+
+\paragraph{Grammar Trace.}
+The
+% noindex
+\agwindow{Grammar Trace} is another feature which allows you to
+inspect the workings of your parser interactively.  It is particularly
+suited for dealing with ``what if?'' questions.  You can work through
+a parse at whatever level of detail is necessary to see how an error
+arises, to see the nature of an ambiguity, or simply to gain
+confidence in the way the parser works.  In case of certain types of
+errors, AnaGram will provide pre-built grammar traces to illustrate
+the problem.
+
+\paragraph{Other Debugging Tools.}
+AnaGram provides a number of debugging tools that can help you get
+your program up and running on schedule.  In particular, AnaGram has
+powerful tools for identifying ambiguities in your grammar.  AnaGram
+also has coverage analysis facilities to help you ascertain the
+effectiveness of your test suites.
+
+When AnaGram analyzes a grammar, it creates numerous tables describing
+various aspects of the grammar.  To facilitate inspection of these
+tables, AnaGram has an interactive interface to enable you to find
+quickly any problems in your grammar.  An extensive, on-line help
+system provides quick online answers to the questions you have about
+AnaGram.
+
+\paragraph{No Lexical Scanner Required.}
+\index{Lexical scanner}
+When you use AnaGram, you seldom have to use a ``lexical scanner'', or
+input processor, written in still another programming language, to
+``tokenize'' character-based input for your parser.  Instead, you can
+specify {\it all} the details of the input stream directly in your
+grammar in a natural way.  If those details need to be changed, you
+can make all the changes in one place and rebuild your parser without
+having to deal with a cumbersome lexical scanner interface.  AnaGram
+accomplishes this by providing a notation that allows you to specify
+keywords and character sets simply and intuitively.  AnaGram also
+provides options for selectively ignoring white space or other
+uninteresting characters in your input.
+
+On the other hand, if you already have a lexical scanner, or some
+other data source, you can interface it cleanly and simply to a parser
+AnaGram generates.  If the nature of your problem requires a lexical
+scanner, or multi-stage parsing, you can use AnaGram for each level of
+parsing.
+
+\paragraph{Flexible Interfacing.}
+AnaGram provides numerous ways for you to interface your parser to the
+rest of your program.  Since you can even configure a parser to work
+in an event driven mode, you can use AnaGram very effectively to deal
+with the new programming styles required by modern window based
+operating systems.
+
+AnaGram provides new notation for linking data to your processing
+routines.  Symbolic hooks tie syntactic constructs directly to your C
+or C++ code.  The processing routines are easier to write and to
+modify.  You can also modify your grammar without having to alter your
+data processing routines.
+
+\paragraph{Virtual Productions.}
+AnaGram provides a powerful, intuitive shorthand notation to help you
+to describe many commonly occurring syntactic forms, such as optional
+elements, lists, and simple sets of options.
+
+\paragraph{Semantic Control over Syntactic Analysis.}
+Extensions to the basic algorithms for developing LALR parsers allow
+you to exert semantic control over syntactic processing by using a new
+feature called ``semantically determined productions''.
+
+\paragraph{Precise Control over White Space.}
+Convenient attribute statements allow you to skip white space and
+comments where they are meaningless, but recognize them where it
+matters.
+
+\paragraph{Easy Configuration.}
+An extensive set of configuration switches and parameters allow you to
+configure both AnaGram and the parsers you build to your precise
+requirements.  Wherever AnaGram provides options, it also provides
+sensible defaults, so that you can ignore most switches and parameters
+until you need the capability they control.
+