diff doc/manual/wm.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/wm.tex	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,411 @@
+\chapter{Warning and Error Messages}
+\index{Warning messages}\index{Error messages}\index{Messages}\index{Messages}
+
+AnaGram provides diagnostic messages in the \agwindow{Warnings} window
+when it finds constructs in your grammar which might be incorrect, or
+when it finds that it cannot continue its analysis of your grammar.
+AnaGram gives up only if it encounters a syntax error or finds that
+you have not specified a \index{Grammar token}\index{Token}grammar
+token.  Otherwise, it continues its analysis.  If AnaGram succeeds in
+analyzing your grammar, it will be in a position to build a parser for
+you, if you should want one.
+
+When AnaGram finds a syntax error in its input it attempts to continue
+scanning for syntax errors but it does no further analysis of the
+input.
+
+When AnaGram identifies a problem while it is scanning your syntax
+file, it precedes the diagnostic with the line number and column
+number at which it found the problem.  It does not provide line and
+column numbers for those problems it discovers when it is actually
+analyzing the grammar.
+
+As an aid to debugging, for all warnings developed while scanning the
+syntax file, AnaGram locks the cursor in the syntax file window to the
+cursor in the Warnings window.  This means that when you move the
+cursor bar in the Warnings window to a warning message that has a line
+number and column number, the cursor in the syntax file window is
+moved to the corresponding line and column.
+
+\section{Alphabetic Listing of Warning Messages}
+
+In this list of warning messages, each message is classified according
+to whether it is a warning or an error and according to when it
+occurs.  Errors prevent AnaGram from building a parser; warnings do
+not.  Messages may occur at program initialization, while scanning the
+syntax file, while analyzing the grammar, or while building the
+parser.  Messages issued while scanning the syntax file are always
+accompanied by the line and column number in the syntax file where the
+problem is recognized.
+
+% XXX I would like to change ``warning, analysis'' to ``analysis
+% warning'' for all these.
+
+\dualheading{Both error token resynch and auto resynch specified}
+{warning, analysis}
+
+Your grammar defines an \index{Error token}\index{Token}\agparam{error
+token} and also requests automatic resynchronization. AnaGram will
+ignore the request for automatic
+\index{Resynchronization}resynchronization and will provide error
+token \index{Resynchronization}resynchronization. If you named a token
+\agcode{error} but do not wish error token resynchronization, you can
+either rename \agcode{error}, or explicitly specify the error token to be
+something you don't use in your grammar:
+
+\begin{indentingcode}{0.4in}
+{}[ error token = not used ]
+\end{indentingcode}
+
+\dualheading{Conflicts resolved by precedence rules}
+{warning, analysis}
+
+Your grammar has conflicts which AnaGram has resolved by applying the
+precedence rules you supplied.  These conflicts are listed in the
+\index{Resolved Conflicts}\index{Window}\agwindow{Resolved Conflicts}
+window, and are not listed in the
+\index{Conflicts}\index{Window}\agwindow{Conflicts} window.
+
+\dualheading{Duplicate production}
+{warning, scan}
+
+A \index{Production}production has been duplicated.  You will have a
+number of reduce-reduce \index{Conflicts}conflicts as a consequence.
+Eliminate the duplicate, and the conflicts it caused will go away.
+
+\dualheading{Empty keyword string}
+{warning, scan}
+
+\index{Keywords}
+Keyword strings must contain at least one character.  If you wish a
+null match, use a null production instead.
+
+\dualheading{eof token not defined}
+{warning, analysis}
+
+\index{Eof token}\index{Token}
+You have requested either error token or automatic resynchronization
+and you have not defined an end of file token. The resynchronization
+procedure will not work correctly at end of file.
+
+\dualheading{Error defining T\textit{nnn}: \textit{token-representation}}
+{warning, analysis}
+
+Errors were encountered while attempting to evaluate the
+\index{Character set}character set for token number \textit{nnn}.
+This warning is always generated in addition to more detailed warnings
+that were made when the actual errors were encountered.
+
+\dualheading{Event driven parser cannot use pointer input}
+{error, build}
+
+\index{Parser}
+\index{Configuration switches}
+\index{Event driven}
+\index{Pointer input}
+If you are going to use \agparam{pointer input}, you should not
+specify your parser as \agparam{event driven}.
+Conversely, if you really want an event driven parser, you cannot specify
+\agparam{pointer input}.  See Appendix A, Configuration Parameters for
+details on the \agparam{pointer input} and \agparam{event driven}
+switches.
+
+\dualheading{Excessive recursion}
+{error, scan}
+
+An internal \index{Stack}stack in AnaGram overflowed because of the
+complexity of an expression in your grammar.  Simplify your grammar by
+using definition statements to name subexpressions.
+
+\dualheading{Fatal syntax errors}
+{error, analysis}
+
+AnaGram could not complete its analysis of your syntax file because of
+syntax errors.
+
+\dualheading{Grammar is ambiguous. See Conflicts Window}
+{warning, analysis}
+
+Your grammar is ambiguous.  See Chapter 7 for suggestions on how to
+deal with the ambiguities.
+
+\dualheading{Inappropriate value}
+{warning, scan}
+
+The value assigned to a configuration parameter is not appropriate.
+The value of the parameter is unchanged.  Check the definition of the
+parameter in Appendix A, Configuration Parameters.
+
+\dualheading{Input scan aborted}
+{error, scan}
+
+Because of the previous errors, AnaGram was unable to finish scanning
+your syntax file.
+
+\dualheading{Insufficient memory}
+{warning, scan or analysis}
+
+Not enough memory is available to continue parsing or analyzing the
+current syntax file.  If you have been running AnaGram for some time,
+you might succeed in analyzing your grammar if you restart AnaGram.
+Otherwise, you need more memory, or you need to make your grammar
+somewhat less complex.
+
+\dualheading{Internal error: ...}
+{error, any phase}
+
+This error results from internal consistency checks that should never
+fail if AnaGram is
+working properly.  If you are running AnaGram on Windows 95 or Windows
+98, it is
+probably not advisable to continue running AnaGram after receiving
+this warning without rebooting your system.  Sometimes when you are
+testing buggy programs using an operating system that does not have
+complete memory protection, a program may inadvertently alter part of
+the system's memory.  If this happens, problems may snowball.  In this
+situation the problem will not recur after you reboot your system.  If
+the problem recurs on a freshly booted system, it may be a problem in
+AnaGram which should be fixed. Please note the complete error message
+and file a bug report via \url{http://www.parsifalsoft.com}.
+\index{Internal error}\index{Errors}
+A copy of the syntax file which causes the problem
+would be of great assistance in fixing it.
+
+\dualheading{Keyword anomalies found}
+{warning, analysis}
+
+See the
+\index{Anomaly}\index{Keyword Anomalies}\agwindow{Keyword Anomalies}
+table for a list of the anomalies found in your syntax file.
+See Chapter 7 for a treatment of keyword anomalies.
+
+\dualheading{Missing \textit{syntactic-element-1} in
+\textit{syntactic-element-2}}
+{error, scan}
+
+AnaGram expects to see an instance of \textit{syntactic element 1} at
+this location in an instance of \textit{syntactic element 2}.  It
+cannot reliably continue parsing its input.  Therefore, it limits
+further analysis to scanning for syntax errors.
+
+\dualheading{Missing production, T\textit{nnn}: \textit{token-name}}
+{error, scan}
+
+\index{Production}
+Token number \textit{nnn}, a nonterminal token, appears to be defined
+recursively, but there is no initial production to get the recursion
+started.  Check your grammar closely.
+
+\dualheading{Missing reduction procedure, R\textit{nnn}}
+{warning, scan}
+
+\index{Reduction procedure}
+A reduction parameter has been defined in this rule, number
+\textit{nnn}, but there is no reduction procedure to use it.  This
+warning is provided in case the lack of a reduction procedure is an
+oversight.
+
+\dualheading{Multiple definitions for T\textit{nnn}: \textit{token-name}}
+{warning, analysis}
+
+\index{Definitions}
+Token number \textit{nnn} has been defined as a character set and has
+also been defined as a nonterminal token.  It can't be both.
+
+\dualheading{Negative character codes in pointer mode}
+{warning, analysis}
+
+\index{Character codes}
+You have defined negative character codes and you are using pointer
+input.  If you are using the default definition for pointer type you
+will be reading unsigned characters, so that your parser will never
+see the negative codes you have defined.
+
+% I wish there were an easy way to shut this up if the pointer type is
+% signed.
+
+\dualheading{No grammar token specified}
+{error, analysis}
+
+\index{Grammar token}\index{Token}
+You have not specified a grammar token.
+Edit your syntax file to specify one.
+
+\dualheading{No productions in syntax file}
+{error, analysis}
+
+AnaGram did not find any productions at all in the syntax file.  Do
+you have the right file?
+
+\dualheading{No such parameter}
+{warning, scan}
+
+AnaGram does not recognize the name of the configuration parameter you
+have tried to set.  Check the spelling of the parameter you wish to
+set.  See Appendix A, Configuration Parameters.
+
+\dualheading{Not a character set, T\textit{nnn}: \textit{token-name}}
+{warning, analysis}
+
+Token number \textit{nnn} has been used on the left side of a
+production and in a character set expression defining some other
+token.  AnaGram will use an empty set in place of token number
+\textit{nnn} in the character set expression.  You will get another
+warning, Error defining token, when AnaGram finishes its evaluation of
+the character set.
+
+\dualheading{Nothing reduces T\textit{nnn} -$>$ R\textit{mmm}}
+{warning, analysis}
+
+Your grammar does not specify any input to follow an instance of this
+rule, rule number \textit{mmm}.  In all probability, your grammar does
+not have any explicit end of file indicator.  If you do not have any
+conflicts with token T000, then you can get along without an end of
+file indicator.  Otherwise, you should modify your grammar so that it
+recognizes end of file.
+
+\dualheading{Null character in keyword string}
+{warning, scan}
+
+\index{Keywords}
+A keyword string cannot have an embedded null character.  If you must
+allow for a null you will have to rewrite your grammar rule.  For
+example, instead of
+
+\begin{indentingcode}{0.4in}
+widget
+  -> "abc{\bs}0def"
+\end{indentingcode}
+write
+\begin{indentingcode}{0.4in}
+widget
+  -> "abc", 0, "def"
+\end{indentingcode}
+
+If you have defined a symbol as a keyword string, you will have to
+rewrite the definition as a production. Suppose, for example, you had
+written
+
+\begin{indentingcode}{0.4in}
+marker = "abc{\bs}0def"
+\end{indentingcode}
+
+You would have to rewrite this as
+
+\begin{indentingcode}{0.4in}
+marker
+  -> "abc", 0, "def"
+\end{indentingcode}
+
+\dualheading{Parameter \textit{name} has type void}
+{warning, scan}
+
+The specified parameter for a reduction procedure attempts to take the
+value of a token whose type has been specified as void.
+
+\dualheading{Range bounds out of order}
+{warning, scan}
+
+\index{Character range}\index{Range}
+AnaGram interprets 'z-a', for example, as the letters from a to z, but
+provides a warning in case the unusual order was a typo.
+
+\dualheading{Recursive definition of char set: \textit{name}}
+{warning, analysis}
+
+\index{Character sets}
+Character sets cannot be defined recursively.
+
+\dualheading{Redefinition of \textit{name}}
+{warning, analysis}
+
+There is a previous definition statement for this variable.  AnaGram
+ignores the new definition.
+
+\dualheading{Redefinition of grammar token}
+{warning, scan}
+
+\index{Grammar token}\index{Token}
+AnaGram simply discards the old definition of the grammar, or goal,
+token and uses the new one.  The last definition in the syntax file
+wins.  Check your syntax file to be sure you have the grammar token
+you want.
+
+\dualheading{Redefinition of token, T\textit{nnn}: \textit{name}}
+{warning, scan}
+
+This variable has already been used as a nonterminal token, that is,
+it has been used as the left side of a production.  AnaGram will
+ignore this definition statement.
+
+\dualheading{Suspicious production for \textit{token name}}
+{warning, scan}
+
+This production has the form
+
+\begin{indentingcode}{0.4in}
+x -> x
+\end{indentingcode}
+
+You probably have a typo somewhere.  This production causes a conflict
+in your grammar.  AnaGram leaves this production in your grammar, but
+if you build a parser, it will never succeed in recognizing this
+production.
+
+\dualheading{Syntax Analysis Aborted}
+{error, analysis}
+
+Because of the previous errors, AnaGram was unable to complete its
+analysis of your syntax file.
+
+\dualheading{Token not used, T\textit{nnn}: \textit{token name}}
+{warning, analysis}
+
+AnaGram doesn't mind, but warns you just in case there was some sort
+of oversight.
+
+\dualheading{Type Redefinition of T\textit{nnn}: \textit{token name}}
+{warning, analysis}
+
+A previous statement has defined a different data type for token
+number \textit{nnn}.  This definition will override the previous one.
+If you intend to use different type definitions, you should use
+extreme caution and check the generated code to verify that your
+reduction procedures are getting the values you intended.
+
+\dualheading{Undefined symbol: \textit{name}}
+{warning, analysis}
+
+\index{Symbol}
+AnaGram encountered this undefined symbol while evaluating a character
+set.  The next warning in the Warnings window identifies the
+particular token AnaGram was trying to evaluate.
+
+\dualheading{Undefined token T\textit{nnn}: \textit{name}}
+{warning, analysis}
+
+\index{Token}
+This name has been used as though it represented a token, but there is
+no definition of it as a terminal nor does any production define it as
+a nonterminal.
+
+\dualheading{Unexpected \textit{syntactic-element-1} in
+\textit{syntactic-element-2}}
+{error, scan}
+
+AnaGram does not expect to see an instance of
+\textit{syntactic-element-1} at this location in an instance of
+\textit{syntactic-element-2}.
+It cannot reliably continue parsing its input.  Therefore, it limits
+further analysis to scanning for syntax errors.  If this error is not
+the result of some prior error, you should correct your syntax file.
+Remember that this error could just as well result from something
+missing as well as from something extraneous.
+
+\dualheading{Void token, \textit{token-name}, used as parameter}
+{warning, scan}
+
+\index{Token}
+The token being declared as void has previously been used as a
+parameter for a reduction procedure.  Your C compiler will complain
+when it tries to compile the call to the reduction procedure.