Mercurial > ~dholland > hg > ag > index.cgi
diff doc/manual/xg-ii.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/xg-ii.tex Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,541 @@ +\chapter{Exploring Your Grammar II: Grammar Tables} + +\section{Purpose of This Chapter} + +AnaGram creates a number of tables which are useful for understanding +your grammar and verifying its operation. This chapter discusses +these tables and what you can learn from them. The discussions are +organized around related groups of tables which deal with particular +aspects of your grammar. Generally speaking, when you make a new +grammar or make extensive revisions of an old one, you should look at +some of these tables just to verify that they make sense. + +Many of the tables AnaGram creates are listed in the +\index{Browse menu}\index{Menu}\agmenu{Browse} menu of the +\agwindow{Control Panel} after you have analyzed your grammar. Other +tables, which expand upon the data in a particular window, are +available by clicking the right mouse button to pop up the +\agmenu{Auxiliary Windows} menu. The tables in this menu expand upon +the data under the cursor bar in the window you are examining. If a +particular menu item is not available for the selected data, it will +be greyed out. + +Most of AnaGram's windows simply format data which summarize your grammar. +The Trace windows, however, are interactive and allow you to explore your +grammar dynamically. Note that certain windows which show grammar rules or +reduction procedures are synched with your syntax file window for your +convenience. AnaGram's windows are summarized in Appendix C. + + +\section{Formats and Display Conventions} +\index{Display conventions} + +AnaGram's data tables display relationships between character sets, +partition sets, tokens, grammar rules, and parser states. Generally, +each line of a table displays one such relationship. + +\index{C000}\index{S000}\index{R000}\index{P000}\index{T000} +Each entity is uniquely identified by an appropriate number, with the +initial letter specifying what kind of entity is meant: +% ``T'' for token, ``S'' for state, ``R'' for rule, ``C'' for +% character set, and ``P'' for partition set. Thus C013 is character +% set 13, T049 is token 49, and so on. +\textit{T} for token, \textit{S} for state, \textit{R} for rule, +\textit{C} for character set, and \textit{P} for partition set. Thus +\textit{C013} is character set 13, \textit{T049} is token 49, and so on. +Generally when \index{Token}\index{Token number} +\index{Number}token numbers are displayed, the token name is also +given. When grammar rules are displayed, the rule itself is also +displayed. Furthermore, when rules are displayed, the table display +is synched with the display of the syntax file, so that you can see +the rule in context. Rules often are displayed with a ``marked +token'' in a distinctive font (which you may select) to indicate +progress in matching the rule. This signifies that the rule has been +matched up to the point just before the marked token. To continue +matching the rule, the next following input must either be the marked +token, if it is a terminal token, or must eventually reduce to it, if +it is nonterminal. + +% Note: The % won't set in italic, so can't use \textit{} with it +If a token name is followed by a ``\%'' character it means that +AnaGram created a +\index{Shell production}\index{Production}\agterm{shell production} +for this token. The token with the ``\%'' is the basic input token and +the token without the ``\%'' is the shell production. AnaGram creates +shell productions when you use the +\index{Disregard statement}\index{Statement}\index{\_prc}\agparam{disregard} +statement to pass over certain characters or constructs in the input. +The \agparam{disregard} statement is discussed in Chapter 8. + + +\section{Character Sets} +\index{Character Sets} + +AnaGram does an extensive analysis of the character sets you use in +your grammar. In particular, it checks to see if there are any +overlaps among your character sets. If so, it creates a +\index{Character universe}\index{Universe}\index{Partition} +\agterm{partition} of the character universe. + +The \index{Character universe}\index{Universe}character universe +consists of the set of eight bit unsigned characters unless you have +defined characters outside this range. In such an event the character +universe will be extended down to negative values and above 255 only +so far as is necessary to include all the characters you have defined +in your grammar. + +The \index{Partition}partition consists of a collection of mutually +disjoint sets, called \agterm{partition sets}, such that every +character in the \index{Character universe}\index{Universe}character +universe belongs to exactly one partition set and any one of your +character sets can be written uniquely as a union of partition sets. +AnaGram then adds a number of productions to your grammar which +describe your character sets in terms of the partition sets. + +There are three primary tables you may use to see how the character +sets you have used in your grammar are analyzed by AnaGram. These are +the \index{Window}\agwindow{Character Sets} table, the +\index{Partition Sets}\index{Window}\agwindow{Partition Sets} table, +and the \index{Character Map}\index{Window}\agwindow{Character Map} +table. As described below, each of these tables provides access to +additional tables using the \agmenu{Auxiliary Windows} popup menu. +One auxiliary window, \agwindow{Set Elements}, can be used in any +window that identifies a character set, a partition set, or a terminal +token to see the characters that comprise the set, or, in the case of +a terminal token, that comprise the set of characters that corresponds +to the terminal token. + +When you inspect these tables, you should verify that they correspond +to your understanding of your grammar. You should particularly check +to make sure that characters that show up as unused are really +supposed to be unused. On the other hand, do all the characters that +are shown to be used make sense? + +\paragraph{Character Sets.}\index{Character Sets}\index{Window} +The \agwindow{Character Sets} window lists all of the distinct +character sets which you have defined, implicitly or explicitly, in +your grammar. Each line in the table describes one such set. The +description has the following fields: + +\begin{itemize} +\item internal set number +\item token number if any +\item name, if any, followed by ``='' +\item the expression defining the set +\end{itemize} + +The \agmenu{Auxiliary Windows} menu for the \agwindow{Character Sets} +window provides three options. The \agmenu{Partition Sets} option +displays the partition sets that cover the character set you have +selected. The \agmenu{Set Elements} window shows the composition of +the selected character set. If the character set corresponds to a +token in your grammar, the \agmenu{Token Usage} window will show all +rules in your grammar where the token is used. + +% XXX provides -> generates? +\paragraph{Partition Sets.}\index{Partition Sets}\index{Window} +There are two Partition Sets windows available. From the +\agmenu{Window} menu, the \agmenu{Partition Sets} option provides a +list of all the sets that cover the character universe. From the +\agmenu{Auxiliary Windows} menu for the \agwindow{Character Sets} +table, the \agmenu{Partition Sets} option provides a list of the sets +that cover the selected character set. In this case, the character +set number appears on the title bar of the \agwindow{Partition Sets} +window. + +Each line of a \agwindow{Partition Sets} window describes a particular +set in the covering. The description has the following fields: + +\begin{itemize} +\item the partition set number +\item the token number assigned to this set +\item the token name, if any, that corresponds to this set +\end{itemize} + +Partition set zero is the set of all characters in the character +universe that your parser does not accept. If one of the characters +in this set appears in the input to your parser, your parser will +signal a syntax error. You should check this set to make sure it +conforms to your expectations. + +The \agmenu{Auxiliary Windows} menu for the \agwindow{Partition Sets} +window provides two options: \agmenu{Set Elements} and \agmenu{Token +Usage}. \agmenu{Set Elements} will display the characters which +comprise the partition set. \agmenu{Token Usage} will display all the +rules in your grammar that use the token assigned to this set. If +this particular partition set was developed by AnaGram because of an +overlap, it may not correspond precisely to any token in your grammar. +Under these circumstances there will be no explicit usage in your +grammar and \agmenu{Token Usage} will be greyed out in the +\agmenu{Auxiliary Windows} menu. +% ...but in that case shouldn't it show which *used* character sets it +% appears in? +% also, XXX: s/developed/generated/ + +\paragraph{Character Map.}\index{Character Map}\index{Window} +The \agwindow{Character Map} table shows you the mapping of input +characters to token numbers. The \agcode{ag{\us}tcv} table in your +parser is based on the information in this table. + +The fields in this table are, in order: + +\begin{itemize} +\item \index{Character codes}character code +\item display character (if any) +\item partition set number +\item token number +\item token representation +\end{itemize} + +The display character will be whatever Windows displays for this code +in the \agoption{Data Tables} font you have chosen. If a character is +not used in your grammar the token number and token representation are +both \index{T000}\textit{T000}. The \agmenu{Auxiliary Windows} popup +menu provides two options: \agmenu{Set Elements} and \agmenu{Token +Usage}. \agmenu{Set Elements} shows the elements of the partition set +to which the selected character belongs. The \agmenu{Token Usage} +window shows the rules in your grammar in which the token +corresponding to this partition set number is used. + +\paragraph{Set Elements.}\index{Set Elements}\index{Window} + +The Set Elements window can be accessed only through the +\agmenu{Auxiliary Windows} menu in a window that identifies a +character set, a partition set, or a terminal token. The +\agwindow{Set Elements} window shows the numeric code and screen +representation for each element of the set. The character set or +partition set number is displayed in the title bar of the window. In +the case of a terminal token, the character set displayed is the +character set corresponding to the terminal token. + +There is no \agmenu{Auxiliary Windows} menu defined for the +\agwindow{Set Elements} window. + + +\section{The Elements of Your Grammar} + +In analyzing your syntax, AnaGram takes it completely apart and +creates an internal representation of it. A number of the internal +tables are available for your inspection. + +Two tables, the +\index{Symbol Table}\index{Window}\index{Table}\agwindow{Symbol Table} +and the +\index{Token Table}\index{Window}\index{Table}\agwindow{Token Table}, +identify the elementary constituents of your grammar. A third, the +\index{Rule Table}\index{Window}\index{Table}\agwindow{Rule Table}, +summarizes the grammar AnaGram has abstracted from your syntax file. +The \agwindow{Symbol Table} and \agwindow{Token Table} are not +equivalent since you may have named character sets which are not +tokens. You may also have tokens which you have defined directly as +character sets or character ranges and therefore have no names. + +A number of \agwindow{Auxiliary Windows} also provide useful +information about the tokens in your grammar. These are the +\agwindow{Expansion Chain}, \agwindow{Expansion Rules}, +\agwindow{Productions}, \agwindow{Rule Context}, \agwindow{Set +Elements}, and \agwindow{Token Usage} windows. + +\paragraph{Symbol Table.}\index{Symbol Table}\index{Window}\index{Table} +The \agwindow{Symbol Table} lists all the symbols you used in your +grammar. Symbols may be used, of course, to identify tokens, +definitions, or virtual productions or to provide alternative names +for tokens. + +Each line in this table identifies a single symbol. The first field +is the token number, if any. This is followed by the name. If the +name was defined by a definition statement, it is followed by an equal +sign and the right side of the definition. The \agmenu{Auxiliary +Windows} menu for the \agwindow{Symbol Table} has four options: +\agmenu{Expansion Rules}, \agmenu{Productions}, \agmenu{Set Elements}, +and \agmenu{Token Usage}. The \agmenu{Expansion Rules} and +\agmenu{Productions} windows exist only for symbols which name +nonterminal tokens. The \agmenu{Set Elements} window exists only for +symbols which name character sets or terminal tokens. The +\agmenu{Token Usage} table exists for any symbol which names a token. + +\paragraph{Token Table.}\index{Token Table}\index{Window}\index{Table} +The \agwindow{Token Table} lists all the tokens of your grammar. The +first field is the token number. It is followed by a flag field which +is \textit{zl} if the token is a nonterminal token and is \index{Zero +length token}\index{Token}zero length. If the token is nonterminal +and not zero length, the flag field contains \textit{nt}. If the +token is a terminal token, the field is blank. The next field is +blank unless the token has been declared \index{Sticky +declaration}\agparam{sticky} or has had a precedence level assigned. +If the token is sticky, this field will contain \textit{s}. If a +precedence level has been assigned, this field will contain the letter +\textit{l}, \textit{r}, or \textit{n} to indicate associativity +followed by the precedence level. Finally there is the +\index{Data type}\index{Token}data type +of the semantic value of this token and the token representation. + +The \agmenu{Auxiliary Windows} menu for the \agwindow{Token Table} has +four options: \agmenu{Expansion Rules}, \agmenu{Productions}, +\agmenu{Set Elements} and \agmenu{Token Usage}. The \agmenu{Expansion +Rules} and \agmenu{Productions} windows exist only for nonterminal +tokens. \agmenu{Set Elements} exists only for terminal tokens. + +If you have used +\index{Disregard statement}\index{Statement}\agparam{disregard} +statements to cause white space or other uninteresting text to be +skipped in the input to your parser, many of your tokens will appear +in the \agwindow{Token Table} twice: once in the normal form and once +with the ``\%'' character appended. For instance, if you have +specified that \agcode{space} be disregarded after \agcode{name}, +there will be entries for both \agcode{name} and +\agcode{name\%}\index{ \_prc}. In this case, \agcode{name\%} +represents the simple token and \agcode{name} represents +\agcode{name\%} followed by \agcode{space?...} + +It is a good idea to check the \agwindow{Token} and \agwindow{Symbol} +tables from time to time to make sure that all the names are the ones +you intended and not the result of typographical errors. + +\paragraph{Rule Table.}\index{Rule Table}\index{Window}\index{Table} +The \agwindow{Rule Table} lists, in numerical order, all the grammar +rules defined in your grammar. Each rule is preceded by the +nonterminal tokens which produce it. If you are not using +semantically determined productions, then there will be precisely one +token line per rule. The \agwindow{Rule Table} is synched to your +syntax file to show the rule in context. + +The \agmenu{Auxiliary Windows} popup menu for the \agwindow{Rule +Table} has four options: \agmenu{Expansion Rules}, +\agmenu{Productions}, \agmenu{Rule Context} and \agmenu{Token Usage}. +The \agmenu{Expansion Rules}, \agmenu{Productions} and \agmenu{Token +Usage} windows are keyed to the lines in the \agwindow{Rule Table} +which identify tokens. AnaGram will beep if you select one of these +options while a rule is highlighted. The \agmenu{Rule Context} window +is keyed to the highlighted rule, or, if a token is highlighted, the +next following rule. + +\paragraph{Expansion Rules.}\index{Expansion Rules}\index{Window} +The \agwindow{Expansion Rules} window is available in the +\agmenu{Auxiliary Windows} menu from any window that identifies +tokens. It displays a complete left expansion of the selected token +if the token is nonterminal. That is, it is a list of rules that +begins with all the rules produced by the token, plus all the rules +produced by the first token of any rule in the list. The token number +and the name or other representation of the token being expanded is +displayed on the title bar of the window. The \agwindow{Expansion +Rules} window is synched with the syntax file window so you can see +each rule in context. + +The \agwindow{Auxiliary Windows} available from the \agwindow{Expansion +Rules} window are the \agwindow{Expansion Chain}, \agwindow{Expansion +Rules}, \agwindow{Productions}, \agwindow{Rule Context}, \agwindow{Set +Elements}, and \agwindow{Token Usage} windows, all keyed to the marked +token in the highlighted rule. + +\paragraph{Expansion Chain.}\index{Expansion Chain}\index{Window} +The \agwindow{Expansion Chain} window is available in the +\agmenu{Auxiliary Windows} menu from any window that contains +expansion rules, in particular, from the \agwindow{Expansion Rules} +window, from a \agwindow{Conflicts} or \agwindow{Rule Stack} window +(see Chapter 7), from a \agwindow{State Expansion} window (see below), +or even from an \agwindow{Expansion Chain} window. +% XXX that last ``an'' should be ``another'' + +The purpose of an \agwindow{Expansion Chain} window is to show how a +particular expansion rule in a particular state derives from a +characteristic rule for that state. To see a chain of productions +that produces a desired expansion rule, select the expansion rule with +the cursor bar, click the right mouse button for the +\agwindow{Auxiliary Windows} menu, and select \agmenu{Expansion +Chain}. The \agwindow{Expansion Chain} window will then present a +sequence of expansion rules, using the same format as the +\agwindow{Expansion Rules} window, but subject to the constraint that +each rule is produced by the marked token in the previous line. The +first rule in the window is a characteristic rule for the given state. +The last rule in the window is the rule selected by the cursor bar in +the window from which you chose the \agwindow{Expansion Chain}. It +should be noted that this expansion is not unique. There may be other +derivations. + +\paragraph{Productions.}\index{Window}\index{Productions} +The \agwindow{Productions} window is available in the +\agmenu{Auxiliary Windows} popup menu from any window which identifies +tokens. If the token selected by the cursor bar is a terminal token, +the \agmenu{Productions} option will be greyed out. Otherwise, it +will show all the rules the given token produces. The +\agwindow{Productions} window is synched with the syntax file window +so you can see each rule in context. The \agwindow{Productions} +window does not have an \agmenu{Auxiliary Windows} menu. + +\paragraph{Reduction Procedures.} +The \agwindow{Reduction Procedures} window lists the C function +prototypes for the reduction procedures in your grammar. When this +window is active, the syntax file window, if visible, is synchronized +with it so you can see the body of the reduction procedure as well as +its usage. + +\paragraph{Rule Context.}\index{Rule Context}\index{Window} +The \agwindow{Rule Context} window is available in the +\agmenu{Auxiliary Windows} popup menu from any window which identifies +rules. When you select the \agwindow{Rule Context} window, AnaGram +finds all the tokens which produce the selected rule and then finds +all rules in your grammar which use any of these rules. + +The \agmenu{Auxiliary Windows} menu for the \agwindow{Rule Context} +window offers five options: \agmenu{Expansion Rules}, +\agmenu{Productions}, \agmenu{Rule Context}, \agmenu{Set Elements} and +\agmenu{Token Usage}. The \agmenu{Rule Context} option is keyed to +the highlighted rule in the original \agwindow{Rule Context} window. +The remaining windows are keyed to the marked token in the highlighted +rule in the original \agwindow{Rule Context} window. + +\paragraph{Token Usage.}\index{Token Usage}\index{Window} +The \agwindow{Token Usage} window is available in the +\agmenu{Auxiliary Windows} popup menu from any window which identifies +tokens. It displays all rules in your grammar which use the specified +token. The rules are displayed with a marked token, and +\agwindow{Auxiliary Windows} accessed from the \agwindow{Token Usage} +window will be keyed to the marked token which is the one following +the specified token. +% XXX the above sentence needs to be shot + +The \agmenu{Auxiliary Windows} menu for the \agwindow{Token Usage} +window offers five options: \agmenu{Expansion Rules}, +\agmenu{Productions}, \agmenu{Rule Context}, \agmenu{Set Elements} and +\agmenu{Token Usage}. The \agmenu{Rule Context} option is keyed to the +highlighted rule in the \agwindow{Token Usage} window. The remaining +windows are keyed to the marked token in the highlighted rule in the +original \agwindow{Token Usage} window. + + +\section{State Tables} +\index{State} + +When AnaGram analyzes your grammar, the principal result is the +definition of parser states. AnaGram provides one table, the +\agwindow{State Definition} table, listed in the \agmenu{Window} menu, +which describes all the states in the parser. It also provides a +number of \agwindow{Auxiliary Windows} that show the relationships +among the states and the elements of your grammar. + +\paragraph{State Definition Table.} +\index{State Definition Table}\index{Window}\index{Table}\index{Table} +The \agwindow{State Definition Table} lists the rules which define the +states of your parser. Each line contains the state number, which is +blank if it is the same as the state number of the previous line, the +rule number and finally the rule itself. The cursor in the syntax +file window is synched with the cursor bar to show the grammar rule in +context. + +Each state is defined by one or more rules, displayed with a marked +token\index{Rule}\index{Token}\index{Marked rule} in a distinctive +font. The meaning of the marked token is this: If your parser is in +this state, it has accumulated, in the input buffer, all of the tokens +in the rule that are to the left of the marked token. Further input +must be consistent with the marked token in one or the other of the +defining rules. If there is no marked token, the rule is a completed +rule, and an appropriate lookahead token will cause the rule to be +reduced. + +The marked rules that define a particular state of a parser are +sometimes called the +\index{Characteristic rules}\index{Rules}\agterm{characteristic rules} +of the state. + +The \agmenu{Auxiliary Windows} menu for the \agwindow{State Definition +Table} offers ten choices. Four are keyed to the marked token in the +highlighted rule: \agwindow{Expansion Rules}, \agwindow{Productions}, +\agwindow{Set Elements}, and \agwindow{Token Usage}. One, +\agwindow{Rule Context}, is keyed simply to the highlighted rule. +Four are keyed only to the highlighted state: \agwindow{Auxiliary +Trace}, \agwindow{Keywords}, \agwindow{Previous States}, and +\agwindow{State Expansion}. One, \agwindow{Reduction States}, is +keyed to the combination of rule number and state number. It is +available only for completed rules. + +\paragraph{State Definition.} +\index{State Definition}\index{Window} +For some windows which identify a state but do not show its +definition, the Auxiliary Windows menu contains an entry to display +the \index{Characteristic rules}\index{Rules}characteristic rules +which identify the state. The state number is displayed on the title +bar of the window. + +The \agwindow{Auxiliary Windows} choices for a \agwindow{State +Definition} window are the same as for the general \agwindow{State +Definition Table}. + +\paragraph{Auxiliary Trace.} +\index{Auxiliary Trace}\index{Window}\index{Trace} +\agwindow{Auxiliary Trace} windows may be accessed through the +\agmenu{Auxiliary Windows} menu. The \agwindow{Auxiliary Trace} is a +prebuilt \agwindow{Grammar Trace} showing one of perhaps many ways to +get to the state identified by the cursor bar in the parent window. +See Chapter 5 for a discussion of the \agwindow{Grammar Trace}. + +\paragraph{Keywords.}\index{Keywords}\index{Window} +When you select \agmenu{Keywords} in the \agmenu{Window} menu, AnaGram +displays a list of all the keywords defined in your grammar together +with the token numbers assigned to them. When you select +\agmenu{Keywords} in an \agmenu{Auxiliary Windows} menu, AnaGram +displays a list of keywords which your parser will identify in the +state determined by the cursor in the parent window. It displays all +the keywords the parser will recognize in that state, regardless of +whether they are used as shift or as reducing tokens. The state +number is displayed on the title bar of the window. + +The \agmenu{Auxiliary Windows} menu for a \agwindow{Keywords Window} +has only one option: \agmenu{Token Usage}, so you can see all uses of +a given keyword in your grammar. + +\paragraph{Previous States.}\index{Previous States}\index{Window} +A \agwindow{Previousf States} window can be accessed via the +\agmenu{Auxiliary Windows} menu from any window which identifies +parser states. It shows the defining rules for all the states which +jump to the specified state. The \agmenu{Auxiliary Windows} options for a +\agwindow{Previous States} window are the same as for the +\agwindow{State Definition Table}. + +\paragraph{Reduction States.}\index{Window}\index{Reduction States} +A \agwindow{Reduction States} window can be accessed via the +\agmenu{Auxiliary Windows} menu from most windows which display marked +rules with a specified state. In this case, if the highlighted rule +is complete, that is, there is no marked token, the \agmenu{Reduction +States} option will show you all the possible states the parser could +go to on reducing the rule. The actual state your parser will go to +depends on the actual sequence of tokens which brought your parser to +the state you are investigating. The \agwindow{Reduction States} +window is very useful in understanding conflicts and keyword +anomalies. A special version of this window, called \agwindow{Problem +States}, is available from the \agmenu{Auxiliary Windows} menu of the +\agwindow{Conflicts} window. + +The \agmenu{Auxiliary Windows} options for a \agwindow{Reduction +States} window are the same as for the \agwindow{State Definition +Table}. + +\paragraph{State Expansion.}\index{State Expansion}\index{Window} +The \agwindow{State Expansion} window may be accessed using the +\agmenu{Auxiliary Windows} menu from any window that identifies a +state. It shows the complete set of expansion rules for the state, +consisting of the union of the set of characteristic rules and the +sets of expansion rules for the token to the right of the mark in each +characteristic rule. The \agwindow{State Expansion} window shows all +possible legal input to your parser in the given state. The state +itself is identified on the title bar of the window. + +The \agmenu{Auxiliary Windows} menu for the \agwindow{State Expansion} +window has two options keyed to the state number: \agmenu{Auxiliary Trace} and +\agmenu{Previous States}; two options keyed to the state number and rule +number: \agmenu{Expansion Chain} and \agmenu{Reduction States}; four +options keyed to the marked token in the highlighted rule: +\agmenu{Expansion Rules}, \agmenu{Productions}, \agmenu{Set Elements}, +and \agmenu{Token Usage}; and one option keyed simply to the +highlighted rule: \agmenu{Rule Context}. + + +\section{Coverage Analysis Tables} + +AnaGram provides two tables on the \agmenu{Browse} menu, +\agwindow{Rule Coverage} and \agwindow{Trace Coverage}, to let you see +which grammar rules have been identified by your parser in the course +of your testing. \agwindow{Rule Coverage} is described in Chapter 9, +Programming With AnaGram. \agwindow{Trace Coverage} is described in +Chapter 5, Exploring Your Grammar I: Traces. +