NAME
    Soar::Production::Parser - PARSES SOAR PRODUCTIONS

VERSION
    version 1.122820

SYNOPSIS
      use Soar::Production::Parser;
      use Data::Dumper;
      my $parser = Soar::Production::Parser->new;
      my @trees=$parser->parse_file("foo.soar");
      print Dumper(\@trees);

DESCRIPTION
    Soar is a cognitive modeling architecture for programming and
    experimenting with intelligent agents. Soar is programmed using
    productions that look like this:

            sp{name
                    (state <s>)
                    -->
                    (<s> ^foo bar)
            }

    The preceding production matches any state and adds an element named
    "foo" with the value "bar" to it. Productions can get much more
    complicated than that. This module can be used to parse these
    productions. Underlyingly, a Parse::RecDescent grammar is used to
    convert a production into a parse tree. There are also methods for
    extracting all of the productions from a file string, and to remove
    comments (not that I think you'll ever want to do that!).

NAME
    Soar::Production::Parser - Perl extension for parsing angst grammar
    files

METHODS
  "new"
    Creates a new parser.

  "parse_text"
    Argument: the text of a single Soar production. Returns: a parse tree
    for the given production.

  "get_parses"
    Argument: Reference to array containing text for individual productions.
    Return: Reference to an array containing parse trees for each of the
    productions in the input array reference.

  "no_comment"
    Argument: Text which contains Soar productions or commands Return: Same
    text, but with all comments removed. Comments are indicated with a #
    (pound), optionally preceded by a ; (semicolon) and whitespace.

  "productions"
    This method extracts productions from a given text. It returns a
    reference to an array containing either the text of each of the
    productions, or a parse tree for each of them. Note that all comments
    are removed as a preprocessing step to detecting and extracting
    productions. It takes a set of named arguments: 'file'- the name of a
    file to read. 'text'- the text to split. 'parse'- set to true if the
    return value should be an array of parse trees for the extracted
    productions; otherwise an array containing the production text will be
    returned. For example, if you would like to extract all of the
    productions from a file and print their parse trees, you could do this:

        use Soar::Production::Parser;
            use Data::Dumper;
        
            my $file = shift;
            my $parser = Soar::Production::Parser->new();
            my $parses = $parser->productions(
                    file => $file,
                    parse => 1
            );
        
            for my $prod(@$productions){
                    print Dumper($prod);
            }

SEE ALSO
    The documentation for Soar is located at
    <https://code.google.com/p/soar/>. You may also be interested in what a
    production system is, since this module parses Soar productions:
    <http://en.wikipedia.org/wiki/Production_system>.

AUTHOR
    Nathan Glenn <garfieldnate@gmail.com>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2012 by Nathan Glenn.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

