Nathan Gary Glenn > Soar-Production-0.03 > Soar::Production::Parser

Download:
Soar-Production-0.03.tar.gz

Dependencies

Annotate this POD

Website

View/Report Bugs
Module Version: 0.03   Source  

NAME ^

Soar::Production::Parser - Parse Soar productions

VERSION ^

version 0.03

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.

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);
        }

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.

EXPORTED FUNCTIONS ^

The following functions are available for export:

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.

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.

syntax highlighting: