Provided by: tcllib_2.0+dfsg-2_all 
      
    
NAME
       grammar::aycock - Aycock-Horspool-Earley parser generator for Tcl
SYNOPSIS
       package require Tcl 8.5 9
       package require grammar::aycock ?1.1?
       ::aycock::parser grammar ?-verbose?
       parserName parse symList valList ?clientData?
       parserName destroy
       parserName terminals
       parserName nonterminals
       parserName save
________________________________________________________________________________________________________________
DESCRIPTION
       The  grammar::aycock  package  implements  a  parser generator for the class of parsers described in John
       Aycock and R. Nigel Horspool. Practical Earley  Parsing.   The  Computer  Journal,  45(6):620-630,  2002.
       http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.12.4254
PROCEDURES
       The grammar::aycock package exports the single procedure:
       ::aycock::parser grammar ?-verbose?
              Generates  a parser for the given grammar, and returns its name.  If the optional -verbose flag is
              given, dumps verbose information relating to the generated parser to  the  standard  output.   The
              returned parser is an object that accepts commands as shown in OBJECT COMMAND below.
OBJECT COMMAND
       parserName parse symList valList ?clientData?
              Invokes a parser returned from ::aycock::parser. symList is a list of grammar symbols representing
              the  terminals  in  an input string, and valList is a list of their semantic values. The result is
              the semantic value of the entire string when parsed.
       parserName destroy
              Destroys a parser constructed by ::aycock::parser.
       parserName terminals
              Returns a list of terminal symbols that may be presented in the  symList  argument  to  the  parse
              object command.
       parserName nonterminals
              Returns a list of nonterminal symbols that were defined in the parser's grammar.
       parserName save
              Returns  a  Tcl  script  that will reconstruct the parser without needing all the mechanism of the
              parser generator at run time.  The reconstructed parser depends  on  a  set  of  commands  in  the
              package  grammar::aycock::runtime,  which  is  also  automatically loaded when the grammar::aycock
              package is loaded.
DESCRIPTION
       The grammar::aycock::parser command accepts a grammar  expressed  as  a  Tcl  list.   The  list  must  be
       structured  as  the concatenation of a set of rules. Each rule comprises a variable number of elements in
       the list:
       •      The name of the nonterminal symbol that the rule reduces.
       •      The literal string, ::=
       •      Zero or more names of terminal or nonterminal symbols that comprise  the  right-hand-side  of  the
              rule.
       •      Finally,  a  Tcl  script to execute when the rule is reduced.  Within the given script, a variable
              called _ contains a list of the semantic values of the symbols on the right-hand side.  The  value
              returned  by  the  script  is  expected  to  be  the semantic value of the left-hand side.  If the
              clientData parameter was passed to the  parse  method,  it  is  available  in  a  variable  called
              clientData.   It is permissible for the script to be the empty string.  In this case, the semantic
              value of the rule will be the same as the semantic value of the first  symbol  on  the  right-hand
              side.  If the right-hand side is also empty, the semantic value will be the empty string.
       Parsing  is  done  with an Earley parser, which is not terribly efficient in speed or memory consumption,
       but which deals effectively with ambiguous grammars.  For this reason,  the  grammar::aycock  package  is
       perhaps  best  adapted to natural-language processing or the parsing of extraordinarily complex languages
       in which ambiguity can be tolerated.
EXAMPLE
       The following code demonstrates a trivial desk calculator, admitting only +, *  and  parentheses  as  its
       operators.   It  also  shows  the  format  in  which the lexical analyzer is expected to present terminal
       symbols to the parser.
              set p [aycock::parser {
                  start ::= E {}
                  E ::= E + T {expr {[lindex $_ 0] + [lindex $_ 2]}}
                  E ::= T {}
                  T ::= T * F {expr {[lindex $_ 0] * [lindex $_ 2]}}
                  T ::= F {}
                  F ::= NUMBER {}
                  F ::= ( E ) {lindex $_ 1}
              }]
              puts [$p parse {(  NUMBER +  NUMBER )  *  ( NUMBER +  NUMBER ) }  {{} 2      {} 3      {} {} {} 7     {} 1      {}}]
              $p destroy
       The example, when run, prints 40.
KEYWORDS
       Aycock, Earley, Horspool, parser, compiler
KEYWORDS
       ambiguous, aycock, earley, grammar, horspool, parser, parsing, transducer
CATEGORY
       Grammars and finite automata
COPYRIGHT
       Copyright (c) 2006 by Kevin B. Kenny <kennykb@acm.org>
       Redistribution permitted under the terms of the Open Publication License <http://www.opencontent.org/openpub/>
tcllib                                                 1.1                                 grammar::aycock(3tcl)