# NAME

Soar::Production::Parser - PARSES SOAR PRODUCTIONS

# VERSION

version 1.122830

# 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/](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](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.
