aycock(3)



grammar::aycock(Aycock-Horspool-Earley parser generator fgrammar::aycock(3tcl)

______________________________________________________________________________

NAME
       grammar::aycock - Aycock-Horspool-Earley parser generator for Tcl

SYNOPSIS
       package require Tcl  8.5

       package require grammar::aycock  ?1.0?

       ::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 informa-
              tion 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  re-
              sult 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:

       o      The name of the nonterminal symbol that the rule reduces.

       o      The literal string, ::=

       o      Zero  or more names of terminal or nonterminal symbols that com-
              prise the right-hand-side of the rule.

       o      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 am-
       biguous grammars.  For this reason, the grammar::aycock package is per-
       haps  best adapted to natural-language processing or the parsing of ex-
       traordinarily 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, trans-
       ducer

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.0                grammar::aycock(3tcl)

Man(1) output converted with man2html
list of all man pages