<html>
<head>
<title>PLY Internals</title>
</head>
<body bgcolor="#ffffff">

<h1>PLY Internals</h1>
 
<b>
David M. Beazley <br>
dave@dabeaz.com<br>
</b>

<p>
<b>PLY Version: 3.11</b>
<p>

<!-- INDEX -->
<div class="sectiontoc">
<ul>
<li><a href="#internal_nn1">Introduction</a>
<li><a href="#internal_nn2">Grammar Class</a>
<li><a href="#internal_nn3">Productions</a>
<li><a href="#internal_nn4">LRItems</a>
<li><a href="#internal_nn5">LRTable</a>
<li><a href="#internal_nn6">LRGeneratedTable</a>
<li><a href="#internal_nn7">LRParser</a>
<li><a href="#internal_nn8">ParserReflect</a>
<li><a href="#internal_nn9">High-level operation</a>
</ul>
</div>
<!-- INDEX -->


<H2><a name="internal_nn1"></a>1. Introduction</H2>


This document describes classes and functions that make up the internal
operation of PLY.  Using this programming interface, it is possible to
manually build an parser using a different interface specification
than what PLY normally uses.  For example, you could build a gramar
from information parsed in a completely different input format.  Some of
these objects may be useful for building more advanced parsing engines
such as GLR.

<p>
It should be stressed that using PLY at this level is not for the
faint of heart.  Generally, it's assumed that you know a bit of
the underlying compiler theory and how an LR parser is put together.

<H2><a name="internal_nn2"></a>2. Grammar Class</H2>


The file <tt>ply.yacc</tt> defines a class <tt>Grammar</tt> that 
is used to hold and manipulate information about a grammar
specification.   It encapsulates the same basic information
about a grammar that is put into a YACC file including 
the list of tokens, precedence rules, and grammar rules. 
Various operations are provided to perform different validations
on the grammar.  In addition, there are operations to compute
the first and follow sets that are needed by the various table
generation algorithms.

<p>
<tt><b>Grammar(terminals)</b></tt>

<blockquote>
Creates a new grammar object.  <tt>terminals</tt> is a list of strings
specifying the terminals for the grammar.  An instance <tt>g</tt> of
<tt>Grammar</tt> has the following methods:
</blockquote>

<p>
<b><tt>g.set_precedence(term,assoc,level)</tt></b>
<blockquote>
Sets the precedence level and associativity for a given terminal <tt>term</tt>.  
<tt>assoc</tt> is one of <tt>'right'</tt>,
<tt>'left'</tt>, or <tt>'nonassoc'</tt> and <tt>level</tt> is a positive integer.  The higher
the value of <tt>level</tt>, the higher the precedence.  Here is an example of typical
precedence settings:

<pre>
g.set_precedence('PLUS',  'left',1)
g.set_precedence('MINUS', 'left',1)
g.set_precedence('TIMES', 'left',2)
g.set_precedence('DIVIDE','left',2)
g.set_precedence('UMINUS','left',3)
</pre>

This method must be called prior to adding any productions to the
grammar with <tt>g.add_production()</tt>.  The precedence of individual grammar
rules is determined by the precedence of the right-most terminal.

</blockquote>
<p>
<b><tt>g.add_production(name,syms,func=None,file='',line=0)</tt></b>
<blockquote>
Adds a new grammar rule.  <tt>name</tt> is the name of the rule,
<tt>syms</tt> is a list of symbols making up the right hand
side of the rule, <tt>func</tt> is the function to call when
reducing the rule.   <tt>file</tt> and <tt>line</tt> specify
the filename and line number of the rule and are used for
generating error messages.    

<p>
The list of symbols in <tt>syms</tt> may include character
literals and <tt>%prec</tt> specifiers.  Here are some
examples:

<pre>
g.add_production('expr',['expr','PLUS','term'],func,file,line)
g.add_production('expr',['expr','"+"','term'],func,file,line)
g.add_production('expr',['MINUS','expr','%prec','UMINUS'],func,file,line)
</pre>

<p>
If any kind of error is detected, a <tt>GrammarError</tt> exception
is raised with a message indicating the reason for the failure.
</blockquote>

<p>
<b><tt>g.set_start(start=None)</tt></b>
<blockquote>
Sets the starting rule for the grammar.  <tt>start</tt> is a string
specifying the name of the start rule.   If <tt>start</tt> is omitted,
the first grammar rule added with <tt>add_production()</tt> is taken to be
the starting rule.  This method must always be called after all
productions have been added.
</blockquote>

<p>
<b><tt>g.find_unreachable()</tt></b>
<blockquote>
Diagnostic function.  Returns a list of all unreachable non-terminals
defined in the grammar.  This is used to identify inactive parts of
the grammar specification.
</blockquote>

<p>
<b><tt>g.infinite_cycle()</tt></b>
<blockquote>
Diagnostic function.  Returns a list of all non-terminals in the
grammar that result in an infinite cycle.  This condition occurs if
there is no way for a grammar rule to expand to a string containing
only terminal symbols.
</blockquote>

<p>
<b><tt>g.undefined_symbols()</tt></b>
<blockquote>
Diagnostic function.  Returns a list of tuples <tt>(name, prod)</tt>
corresponding to undefined symbols in the grammar. <tt>name</tt> is the
name of the undefined symbol and <tt>prod</tt> is an instance of 
<tt>Production</tt> which has information about the production rule
where the undefined symbol was used.
</blockquote>

<p>
<b><tt>g.unused_terminals()</tt></b>
<blockquote>
Diagnostic function.  Returns a list of terminals that were defined,
but never used in the grammar.
</blockquote>

<p>
<b><tt>g.unused_rules()</tt></b>
<blockquote>
Diagnostic function.  Returns a list of <tt>Production</tt> instances
corresponding to production rules that were defined in the grammar,
but never used anywhere.  This is slightly different
than <tt>find_unreachable()</tt>.
</blockquote>

<p>
<b><tt>g.unused_precedence()</tt></b>
<blockquote>
Diagnostic function.  Returns a list of tuples <tt>(term, assoc)</tt> 
corresponding to precedence rules that were set, but never used the
grammar.  <tt>term</tt> is the terminal name and <tt>assoc</tt> is the
precedence associativity (e.g., <tt>'left'</tt>, <tt>'right'</tt>, 
or <tt>'nonassoc'</tt>.
</blockquote>

<p>
<b><tt>g.compute_first()</tt></b>
<blockquote>
Compute all of the first sets for all symbols in the grammar.  Returns a dictionary
mapping symbol names to a list of all first symbols.
</blockquote>

<p>
<b><tt>g.compute_follow()</tt></b>
<blockquote>
Compute all of the follow sets for all non-terminals in the grammar.
The follow set is the set of all possible symbols that might follow a
given non-terminal.  Returns a dictionary mapping non-terminal names
to a list of symbols.
</blockquote>

<p>
<b><tt>g.build_lritems()</tt></b>
<blockquote>
Calculates all of the LR items for all productions in the grammar.  This
step is required before using the grammar for any kind of table generation.
See the section on LR items below.
</blockquote>

<p>
The following attributes are set by the above methods and may be useful
in code that works with the grammar.  All of these attributes should be
assumed to be read-only.  Changing their values directly will likely 
break the grammar.

<p>
<b><tt>g.Productions</tt></b>
<blockquote>
A list of all productions added.  The first entry is reserved for
a production representing the starting rule.  The objects in this list
are instances of the <tt>Production</tt> class, described shortly.
</blockquote>

<p>
<b><tt>g.Prodnames</tt></b>
<blockquote>
A dictionary mapping the names of nonterminals to a list of all
productions of that nonterminal.
</blockquote>

<p>
<b><tt>g.Terminals</tt></b>
<blockquote>
A dictionary mapping the names of terminals to a list of the
production numbers where they are used.
</blockquote>

<p>
<b><tt>g.Nonterminals</tt></b>
<blockquote>
A dictionary mapping the names of nonterminals to a list of the
production numbers where they are used.
</blockquote>

<p>
<b><tt>g.First</tt></b>
<blockquote>
A dictionary representing the first sets for all grammar symbols.  This is
computed and returned by the <tt>compute_first()</tt> method.
</blockquote>

<p>
<b><tt>g.Follow</tt></b>
<blockquote>
A dictionary representing the follow sets for all grammar rules.  This is
computed and returned by the <tt>compute_follow()</tt> method.
</blockquote>

<p>
<b><tt>g.Start</tt></b>
<blockquote>
Starting symbol for the grammar.  Set by the <tt>set_start()</tt> method.
</blockquote>

For the purposes of debugging, a <tt>Grammar</tt> object supports the <tt>__len__()</tt> and
<tt>__getitem__()</tt> special methods.  Accessing <tt>g[n]</tt> returns the nth production
from the grammar.


<H2><a name="internal_nn3"></a>3. Productions</H2>


<tt>Grammar</tt> objects store grammar rules as instances of a <tt>Production</tt> class.  This
class has no public constructor--you should only create productions by calling <tt>Grammar.add_production()</tt>.
The following attributes are available on a <tt>Production</tt> instance <tt>p</tt>.

<p>
<b><tt>p.name</tt></b>
<blockquote>
The name of the production. For a grammar rule such as <tt>A : B C D</tt>, this is <tt>'A'</tt>.
</blockquote>

<p>
<b><tt>p.prod</tt></b>
<blockquote>
A tuple of symbols making up the right-hand side of the production.  For a grammar rule such as <tt>A : B C D</tt>, this is <tt>('B','C','D')</tt>.
</blockquote>

<p>
<b><tt>p.number</tt></b>
<blockquote>
Production number.  An integer containing the index of the production in the grammar's <tt>Productions</tt> list.
</blockquote>

<p>
<b><tt>p.func</tt></b>
<blockquote>
The name of the reduction function associated with the production.
This is the function that will execute when reducing the entire
grammar rule during parsing.
</blockquote>

<p>
<b><tt>p.callable</tt></b>
<blockquote>
The callable object associated with the name in <tt>p.func</tt>.  This is <tt>None</tt>
unless the production has been bound using <tt>bind()</tt>.
</blockquote>

<p>
<b><tt>p.file</tt></b>
<blockquote>
Filename associated with the production.  Typically this is the file where the production was defined.  Used for error messages.
</blockquote>

<p>
<b><tt>p.lineno</tt></b>
<blockquote>
Line number associated with the production.  Typically this is the line number in <tt>p.file</tt> where the production was defined.  Used for error messages.
</blockquote>

<p>
<b><tt>p.prec</tt></b>
<blockquote>
Precedence and associativity associated with the production.  This is a tuple <tt>(assoc,level)</tt> where
<tt>assoc</tt> is one of <tt>'left'</tt>,<tt>'right'</tt>, or <tt>'nonassoc'</tt> and <tt>level</tt> is
an integer.   This value is determined by the precedence of the right-most terminal symbol in the production
or by use of the <tt>%prec</tt> specifier when adding the production.
</blockquote>

<p>
<b><tt>p.usyms</tt></b>
<blockquote>
A list of all unique symbols found in the production.
</blockquote>

<p>
<b><tt>p.lr_items</tt></b>
<blockquote>
A list of all LR items for this production.  This attribute only has a meaningful value if the
<tt>Grammar.build_lritems()</tt> method has been called.  The items in this list are 
instances of <tt>LRItem</tt> described below.
</blockquote>

<p>
<b><tt>p.lr_next</tt></b>
<blockquote>
The head of a linked-list representation of the LR items in <tt>p.lr_items</tt>.  
This attribute only has a meaningful value if the <tt>Grammar.build_lritems()</tt> 
method has been called.  Each <tt>LRItem</tt> instance has a <tt>lr_next</tt> attribute
to move to the next item.  The list is terminated by <tt>None</tt>.
</blockquote>

<p>
<b><tt>p.bind(dict)</tt></b>
<blockquote>
Binds the production function name in <tt>p.func</tt> to a callable object in 
<tt>dict</tt>.   This operation is typically carried out in the last step
prior to running the parsing engine and is needed since parsing tables are typically
read from files which only include the function names, not the functions themselves.
</blockquote>

<P>
<tt>Production</tt> objects support
the <tt>__len__()</tt>, <tt>__getitem__()</tt>, and <tt>__str__()</tt>
special methods.
<tt>len(p)</tt> returns the number of symbols in <tt>p.prod</tt>
and <tt>p[n]</tt> is the same as <tt>p.prod[n]</tt>. 

<H2><a name="internal_nn4"></a>4. LRItems</H2>


The construction of parsing tables in an LR-based parser generator is primarily
done over a set of "LR Items".   An LR item represents a stage of parsing one
of the grammar rules.   To compute the LR items, it is first necessary to
call <tt>Grammar.build_lritems()</tt>.  Once this step, all of the productions
in the grammar will have their LR items attached to them.

<p>
Here is an interactive example that shows what LR items look like if you
interactively experiment.  In this example, <tt>g</tt> is a <tt>Grammar</tt> 
object.

<blockquote>
<pre>
>>> <b>g.build_lritems()</b>
>>> <b>p = g[1]</b>
>>> <b>p</b>
Production(statement -> ID = expr)
>>>
</pre>
</blockquote>

In the above code, <tt>p</tt> represents the first grammar rule. In
this case, a rule <tt>'statement -> ID = expr'</tt>.

<p>
Now, let's look at the LR items for <tt>p</tt>.

<blockquote>
<pre>
>>> <b>p.lr_items</b>
[LRItem(statement -> . ID = expr), 
 LRItem(statement -> ID . = expr), 
 LRItem(statement -> ID = . expr), 
 LRItem(statement -> ID = expr .)]
>>>
</pre>
</blockquote>

In each LR item, the dot (.) represents a specific stage of parsing.  In each LR item, the dot
is advanced by one symbol.  It is only when the dot reaches the very end that a production
is successfully parsed.

<p>
An instance <tt>lr</tt> of <tt>LRItem</tt> has the following
attributes that hold information related to that specific stage of
parsing.

<p>
<b><tt>lr.name</tt></b>
<blockquote>
The name of the grammar rule. For example, <tt>'statement'</tt> in the above example.
</blockquote>

<p>
<b><tt>lr.prod</tt></b>
<blockquote>
A tuple of symbols representing the right-hand side of the production, including the
special <tt>'.'</tt> character.  For example, <tt>('ID','.','=','expr')</tt>.
</blockquote>

<p>
<b><tt>lr.number</tt></b>
<blockquote>
An integer representing the production number in the grammar.
</blockquote>

<p>
<b><tt>lr.usyms</tt></b>
<blockquote>
A set of unique symbols in the production.  Inherited from the original <tt>Production</tt> instance.
</blockquote>

<p>
<b><tt>lr.lr_index</tt></b>
<blockquote>
An integer representing the position of the dot (.).  You should never use <tt>lr.prod.index()</tt>
to search for it--the result will be wrong if the grammar happens to also use (.) as a character
literal.
</blockquote>

<p>
<b><tt>lr.lr_after</tt></b>
<blockquote>
A list of all productions that can legally appear immediately to the right of the
dot (.).  This list contains <tt>Production</tt> instances.   This attribute
represents all of the possible branches a parse can take from the current position.
For example, suppose that <tt>lr</tt> represents a stage immediately before
an expression like this:

<pre>
>>> <b>lr</b>
LRItem(statement -> ID = . expr)
>>>
</pre>

Then, the value of <tt>lr.lr_after</tt> might look like this, showing all productions that
can legally appear next:

<pre>
>>> <b>lr.lr_after</b>
[Production(expr -> expr PLUS expr), 
 Production(expr -> expr MINUS expr), 
 Production(expr -> expr TIMES expr), 
 Production(expr -> expr DIVIDE expr), 
 Production(expr -> MINUS expr), 
 Production(expr -> LPAREN expr RPAREN), 
 Production(expr -> NUMBER), 
 Production(expr -> ID)]
>>>
</pre>

</blockquote>

<p>
<b><tt>lr.lr_before</tt></b>
<blockquote>
The grammar symbol that appears immediately before the dot (.) or <tt>None</tt> if
at the beginning of the parse.  
</blockquote>

<p>
<b><tt>lr.lr_next</tt></b>
<blockquote>
A link to the next LR item, representing the next stage of the parse.  <tt>None</tt> if <tt>lr</tt>
is the last LR item.
</blockquote>

<tt>LRItem</tt> instances also support the <tt>__len__()</tt> and <tt>__getitem__()</tt> special methods.
<tt>len(lr)</tt> returns the number of items in <tt>lr.prod</tt> including the dot (.). <tt>lr[n]</tt>
returns <tt>lr.prod[n]</tt>.

<p>
It goes without saying that all of the attributes associated with LR
items should be assumed to be read-only.  Modifications will very
likely create a small black-hole that will consume you and your code.

<H2><a name="internal_nn5"></a>5. LRTable</H2>


The <tt>LRTable</tt> class is used to represent LR parsing table data. This
minimally includes the production list, action table, and goto table. 

<p>
<b><tt>LRTable()</tt></b>
<blockquote>
Create an empty LRTable object.  This object contains only the information needed to
run an LR parser.  
</blockquote>

An instance <tt>lrtab</tt> of <tt>LRTable</tt> has the following methods:

<p>
<b><tt>lrtab.read_table(module)</tt></b>
<blockquote>
Populates the LR table with information from the module specified in <tt>module</tt>.
<tt>module</tt> is either a module object already loaded with <tt>import</tt> or
the name of a Python module.   If it's a string containing a module name, it is
loaded and parsing data is extracted.   Returns the signature  value that was used
when initially writing the tables.  Raises a <tt>VersionError</tt> exception if
the module was created using an incompatible version of PLY.
</blockquote>

<p>
<b><tt>lrtab.bind_callables(dict)</tt></b>
<blockquote>
This binds all of the function names used in productions to callable objects
found in the dictionary <tt>dict</tt>.  During table generation and when reading
LR tables from files, PLY only uses the names of action functions such as <tt>'p_expr'</tt>,
<tt>'p_statement'</tt>, etc.  In order to actually run the parser, these names
have to be bound to callable objects.   This method is always called prior to
running a parser.
</blockquote>

After <tt>lrtab</tt> has been populated, the following attributes are defined.

<p>
<b><tt>lrtab.lr_method</tt></b>
<blockquote>
The LR parsing method used (e.g., <tt>'LALR'</tt>)
</blockquote>


<p>
<b><tt>lrtab.lr_productions</tt></b>
<blockquote>
The production list.  If the parsing tables have been newly
constructed, this will be a list of <tt>Production</tt> instances.  If
the parsing tables have been read from a file, it's a list
of <tt>MiniProduction</tt> instances.  This, together
with <tt>lr_action</tt> and <tt>lr_goto</tt> contain all of the
information needed by the LR parsing engine.
</blockquote>

<p>
<b><tt>lrtab.lr_action</tt></b>
<blockquote>
The LR action dictionary that implements the underlying state machine.
The keys of this dictionary are the LR states.
</blockquote>

<p>
<b><tt>lrtab.lr_goto</tt></b>
<blockquote>
The LR goto table that contains information about grammar rule reductions.
</blockquote>


<H2><a name="internal_nn6"></a>6. LRGeneratedTable</H2>


The <tt>LRGeneratedTable</tt> class represents constructed LR parsing tables on a
grammar.  It is a subclass of <tt>LRTable</tt>.

<p>
<b><tt>LRGeneratedTable(grammar, method='LALR',log=None)</tt></b>
<blockquote>
Create the LR parsing tables on a grammar.  <tt>grammar</tt> is an instance of <tt>Grammar</tt>,
<tt>method</tt> is a string with the parsing method (<tt>'SLR'</tt> or <tt>'LALR'</tt>), and
<tt>log</tt> is a logger object used to write debugging information.  The debugging information
written to <tt>log</tt> is the same as what appears in the <tt>parser.out</tt> file created
by yacc.  By supplying a custom logger with a different message format, it is possible to get
more information (e.g., the line number in <tt>yacc.py</tt> used for issuing each line of
output in the log).   The result is an instance of <tt>LRGeneratedTable</tt>.
</blockquote>

<p>
An instance <tt>lr</tt> of <tt>LRGeneratedTable</tt> has the following attributes.

<p>
<b><tt>lr.grammar</tt></b>
<blockquote>
A link to the Grammar object used to construct the parsing tables.
</blockquote>

<p>
<b><tt>lr.lr_method</tt></b>
<blockquote>
The LR parsing method used (e.g., <tt>'LALR'</tt>)
</blockquote>


<p>
<b><tt>lr.lr_productions</tt></b>
<blockquote>
A reference to <tt>grammar.Productions</tt>.  This, together with <tt>lr_action</tt> and <tt>lr_goto</tt>
contain all of the information needed by the LR parsing engine.
</blockquote>

<p>
<b><tt>lr.lr_action</tt></b>
<blockquote>
The LR action dictionary that implements the underlying state machine.  The keys of this dictionary are
the LR states.
</blockquote>

<p>
<b><tt>lr.lr_goto</tt></b>
<blockquote>
The LR goto table that contains information about grammar rule reductions.
</blockquote>

<p>
<b><tt>lr.sr_conflicts</tt></b>
<blockquote>
A list of tuples <tt>(state,token,resolution)</tt> identifying all shift/reduce conflicts. <tt>state</tt> is the LR state
number where the conflict occurred, <tt>token</tt> is the token causing the conflict, and <tt>resolution</tt> is
a string describing the resolution taken.  <tt>resolution</tt> is either <tt>'shift'</tt> or <tt>'reduce'</tt>.
</blockquote>

<p>
<b><tt>lr.rr_conflicts</tt></b>
<blockquote>
A list of tuples <tt>(state,rule,rejected)</tt> identifying all reduce/reduce conflicts.  <tt>state</tt> is the
LR state number where the conflict occurred, <tt>rule</tt> is the production rule that was selected
and <tt>rejected</tt> is the production rule that was rejected.   Both <tt>rule</tt> and </tt>rejected</tt> are
instances of <tt>Production</tt>.  They can be inspected to provide the user with more information.
</blockquote>

<p>
There are two public methods of <tt>LRGeneratedTable</tt>.

<p>
<b><tt>lr.write_table(modulename,outputdir="",signature="")</tt></b>
<blockquote>
Writes the LR parsing table information to a Python module.  <tt>modulename</tt> is a string 
specifying the name of a module such as <tt>"parsetab"</tt>.  <tt>outputdir</tt> is the name of a 
directory where the module should be created.  <tt>signature</tt> is a string representing a
grammar signature that's written into the output file. This can be used to detect when
the data stored in a module file is out-of-sync with the the grammar specification (and that
the tables need to be regenerated).  If <tt>modulename</tt> is a string <tt>"parsetab"</tt>,
this function creates a file called <tt>parsetab.py</tt>.  If the module name represents a
package such as <tt>"foo.bar.parsetab"</tt>, then only the last component, <tt>"parsetab"</tt> is
used.
</blockquote>


<H2><a name="internal_nn7"></a>7. LRParser</H2>


The <tt>LRParser</tt> class implements the low-level LR parsing engine.


<p>
<b><tt>LRParser(lrtab, error_func)</tt></b>
<blockquote>
Create an LRParser.  <tt>lrtab</tt> is an instance of <tt>LRTable</tt>
containing the LR production and state tables.  <tt>error_func</tt> is the
error function to invoke in the event of a parsing error.
</blockquote>

An instance <tt>p</tt> of <tt>LRParser</tt> has the following methods:

<p>
<b><tt>p.parse(input=None,lexer=None,debug=0,tracking=0,tokenfunc=None)</tt></b>
<blockquote>
Run the parser.  <tt>input</tt> is a string, which if supplied is fed into the
lexer using its <tt>input()</tt> method.  <tt>lexer</tt> is an instance of the
<tt>Lexer</tt> class to use for tokenizing.  If not supplied, the last lexer
created with the <tt>lex</tt> module is used.   <tt>debug</tt> is a boolean flag
that enables debugging.   <tt>tracking</tt> is a boolean flag that tells the
parser to perform additional line number tracking.  <tt>tokenfunc</tt> is a callable
function that returns the next token.  If supplied, the parser will use it to get
all tokens.
</blockquote>

<p>
<b><tt>p.restart()</tt></b>
<blockquote>
Resets the parser state for a parse already in progress.
</blockquote>

<H2><a name="internal_nn8"></a>8. ParserReflect</H2>


<p>
The <tt>ParserReflect</tt> class is used to collect parser specification data
from a Python module or object.   This class is what collects all of the
<tt>p_rule()</tt> functions in a PLY file, performs basic error checking,
and collects all of the needed information to build a grammar.    Most of the
high-level PLY interface as used by the <tt>yacc()</tt> function is actually
implemented by this class.

<p>
<b><tt>ParserReflect(pdict, log=None)</tt></b>
<blockquote>
Creates a <tt>ParserReflect</tt> instance. <tt>pdict</tt> is a dictionary
containing parser specification data.  This dictionary typically corresponds
to the module or class dictionary of code that implements a PLY parser.
<tt>log</tt> is a logger instance that will be used to report error
messages.
</blockquote>

An instance <tt>p</tt> of <tt>ParserReflect</tt> has the following methods:

<p>
<b><tt>p.get_all()</tt></b>
<blockquote>
Collect and store all required parsing information.
</blockquote>

<p>
<b><tt>p.validate_all()</tt></b>
<blockquote>
Validate all of the collected parsing information.  This is a seprate step
from <tt>p.get_all()</tt> as a performance optimization.  In order to
increase parser start-up time, a parser can elect to only validate the
parsing data when regenerating the parsing tables.   The validation
step tries to collect as much information as possible rather than
raising an exception at the first sign of trouble.  The attribute
<tt>p.error</tt> is set if there are any validation errors.  The
value of this attribute is also returned.
</blockquote>

<p>
<b><tt>p.signature()</tt></b>
<blockquote>
Compute a signature representing the contents of the collected parsing
data.  The signature value should change if anything in the parser
specification has changed in a way that would justify parser table
regeneration.   This method can be called after <tt>p.get_all()</tt>,
but before <tt>p.validate_all()</tt>.
</blockquote>

The following attributes are set in the process of collecting data:

<p>
<b><tt>p.start</tt></b>
<blockquote>
The grammar start symbol, if any. Taken from <tt>pdict['start']</tt>.
</blockquote>

<p>
<b><tt>p.error_func</tt></b>
<blockquote>
The error handling function or <tt>None</tt>. Taken from <tt>pdict['p_error']</tt>.
</blockquote>

<p>
<b><tt>p.tokens</tt></b>
<blockquote>
The token list. Taken from <tt>pdict['tokens']</tt>.
</blockquote>

<p>
<b><tt>p.prec</tt></b>
<blockquote>
The precedence specifier.  Taken from <tt>pdict['precedence']</tt>.
</blockquote>

<p>
<b><tt>p.preclist</tt></b>
<blockquote>
A parsed version of the precedence specified.  A list of tuples of the form
<tt>(token,assoc,level)</tt> where <tt>token</tt> is the terminal symbol,
<tt>assoc</tt> is the associativity (e.g., <tt>'left'</tt>) and <tt>level</tt>
is a numeric precedence level.
</blockquote>

<p>
<b><tt>p.grammar</tt></b>
<blockquote>
A list of tuples <tt>(name, rules)</tt> representing the grammar rules. <tt>name</tt> is the
name of a Python function or method in <tt>pdict</tt> that starts with <tt>"p_"</tt>.
<tt>rules</tt> is a list of tuples <tt>(filename,line,prodname,syms)</tt> representing
the grammar rules found in the documentation string of that function. <tt>filename</tt> and <tt>line</tt> contain location
information that can be used for debugging. <tt>prodname</tt> is the name of the 
production. <tt>syms</tt> is the right-hand side of the production.  If you have a
function like this

<pre>
def p_expr(p):
    '''expr : expr PLUS expr
            | expr MINUS expr
            | expr TIMES expr
            | expr DIVIDE expr'''
</pre>

then the corresponding entry in <tt>p.grammar</tt> might look like this:

<pre>
('p_expr', [ ('calc.py',10,'expr', ['expr','PLUS','expr']),
             ('calc.py',11,'expr', ['expr','MINUS','expr']),
             ('calc.py',12,'expr', ['expr','TIMES','expr']),
             ('calc.py',13,'expr', ['expr','DIVIDE','expr'])
           ])
</pre>
</blockquote>

<p>
<b><tt>p.pfuncs</tt></b>
<blockquote>
A sorted list of tuples <tt>(line, file, name, doc)</tt> representing all of
the <tt>p_</tt> functions found. <tt>line</tt> and <tt>file</tt> give location
information.  <tt>name</tt> is the name of the function. <tt>doc</tt> is the
documentation string.   This list is sorted in ascending order by line number.
</blockquote>

<p>
<b><tt>p.files</tt></b>
<blockquote>
A dictionary holding all of the source filenames that were encountered
while collecting parser information.  Only the keys of this dictionary have
any meaning.
</blockquote>

<p>
<b><tt>p.error</tt></b>
<blockquote>
An attribute that indicates whether or not any critical errors 
occurred in validation.  If this is set, it means that that some kind
of problem was detected and that no further processing should be
performed.
</blockquote>


<H2><a name="internal_nn9"></a>9. High-level operation</H2>


Using all of the above classes requires some attention to detail.  The <tt>yacc()</tt>
function carries out a very specific sequence of operations to create a grammar.
This same sequence should be emulated if you build an alternative PLY interface.

<ol>
<li>A <tt>ParserReflect</tt> object is created and raw grammar specification data is
collected.
<li>A <tt>Grammar</tt> object is created and populated with information
from the specification data.
<li>A <tt>LRGenerator</tt> object is created to run the LALR algorithm over
the <tt>Grammar</tt> object.
<li>Productions in the LRGenerator and bound to callables using the <tt>bind_callables()</tt>
method.
<li>A <tt>LRParser</tt> object is created from from the information in the
<tt>LRGenerator</tt> object.
</ol>

</body>
</html>







