Name

Marpa::R2::Scanless::R - Scanless interface recognizers

Synopsis

my $recce = Marpa::R2::Scanless::R->new( { grammar => $grammar } );
my $self = bless { grammar => $grammar }, 'My_Actions';
$self->{recce} = $recce;
local $My_Actions::SELF = $self;

if ( not defined eval { $recce->read($p_input_string); 1 }
    )
{
    ## Add last expression found, and rethrow
    my $eval_error = $EVAL_ERROR;
    chomp $eval_error;
    die $self->show_last_expression(), "\n", $eval_error, "\n";
} ## end if ( not defined eval { $event_count = $recce->read...})

my $value_ref = $recce->value();
if ( not defined $value_ref ) {
    die $self->show_last_expression(), "\n",
        "No parse was found, after reading the entire input\n";
}
package My_Actions;

our $SELF;
sub new { return $SELF }

sub do_parens    { shift; return $_[1] }
sub do_add       { shift; return $_[0] + $_[2] }
sub do_subtract  { shift; return $_[0] - $_[2] }
sub do_multiply  { shift; return $_[0] * $_[2] }
sub do_divide    { shift; return $_[0] / $_[2] }
sub do_pow       { shift; return $_[0]**$_[2] }
sub do_first_arg { shift; return shift; }
sub do_script    { shift; return join q{ }, @_ }
sub show_last_expression {
    my ($self) = @_;
    my $recce = $self->{recce};
    my ( $start, $length ) = $recce->last_completed('Expression');
    return 'No expression was successfully parsed' if not defined $start;
    my $last_expression = $recce->substring( $start, $length );
    return "Last expression successfully parsed was: $last_expression";
} ## end sub show_last_expression

About this document

This page is the reference document for the recognizer objects of Marpa's Scanless interface.

Constructor

my $recce = Marpa::R2::Scanless::R->new( { grammar => $grammar } );

The new() method is the constructor for Scanless recognizers. An example of its use is above. The new() constructor accepts a hash of named arguments. The following named arguments are allowed:

grammar

The new method is required to have a grammar named argument. Its value must be a Scanless grammar object.

trace_terminals

If non-zero, traces the lexemes -- those tokens passed from the G0 parser to the G1 parser. This named argument is the best way to follow what the G0 parser is doing, but it is also very helpful for tracing the G1 parser.

trace_values

This named argument is passed on to the G1 recognizer. See "trace_values" in Marpa::R2::Recognizer

trace_file_handle

The value is a file handle. Trace output and warning messages go to the trace file handle. By default the trace file handle is STDERR.

Methods

last_completed()

my ( $start, $length ) = $recce->last_completed('Expression');

Given the name of a symbol, returns the start location and length of the most recent match. The length is in parse locations, so that the end location will always be the start location plus the length.

If there was more than one most recent match, it returns the longest. If there was no match, returns the empty array in array context and a Perl false in scalar context.

last_completed_range()

Use of this method is discouraged in favor of "last_completed()". Given the name of a symbol, returns the start and end locations of most recent match. If there was more than one most recent match, it returns the longest. If there was no match, returns the empty array in array context and a Perl false in scalar context.

range_to_string()

Use of this method is discouraged in favor of "substring()". Given a start and an end location, returns the substring of the input string that is between the two.

read()

$recce->read($p_input_string);

Given a pointer to an input string, parses it according to the grammar. Currently only a single call to read() is allowed for a scanless recognizer. On success, returns a non-negative integer. On failure, throws an exception.

show_progress()

my $show_progress_output = $recce->show_progress();

Has the same effect as a show_progress() call on the G1 recognizer. See "show_progress()" in Marpa::R2::Recognizer.

substring()

my $last_expression = $recce->substring( $start, $length );

Given a start location and its length, returns a substring of the input string. The length is in locations, so that the end location is always start location plus length. A length of zero will produce a zero-length string.

value()

my $value_ref = $recce->value();

Has the same effect as a value() call on the G1 recognizer. See "value()" in Marpa::R2::Recognizer.

Copyright and License

Copyright 2013 Jeffrey Kegler
This file is part of Marpa::R2.  Marpa::R2 is free software: you can
redistribute it and/or modify it under the terms of the GNU Lesser
General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.

Marpa::R2 is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser
General Public License along with Marpa::R2.  If not, see
http://www.gnu.org/licenses/.