Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

use strict;
use warnings FATAL => 'all';
# ABSTRACT: Implementation of Marpa's interface
use Marpa::R2 2.074;
use Carp qw/croak/;
our $VERSION = '0.001'; # TRIAL VERSION
our $MARPA_TRACE_FILE_HANDLE;
our $MARPA_TRACE_BUFFER;
sub BEGIN {
#
## We do not want Marpa to pollute STDERR
#
## Autovivify a new file handle
#
open($MARPA_TRACE_FILE_HANDLE, '>', \$MARPA_TRACE_BUFFER);
if (! defined($MARPA_TRACE_FILE_HANDLE)) {
croak "Cannot create temporary file handle to tie Marpa logging, $!\n";
} else {
if (! tie ${$MARPA_TRACE_FILE_HANDLE}, 'MarpaX::Languages::ECMAScript::AST::Impl::Logger') {
croak "Cannot tie $MARPA_TRACE_FILE_HANDLE, $!\n";
if (! close($MARPA_TRACE_FILE_HANDLE)) {
croak "Cannot close temporary file handle, $!\n";
}
$MARPA_TRACE_FILE_HANDLE = undef;
}
}
}
sub new {
my ($class, $grammarOptionsHashp, $recceOptionsHashp) = @_;
my $self = {};
$self->{grammar} = Marpa::R2::Scanless::G->new($grammarOptionsHashp);
if (defined($recceOptionsHashp)) {
$recceOptionsHashp->{grammar} = $self->{grammar};
} else {
$recceOptionsHashp = {grammar => $self->{grammar}};
}
$recceOptionsHashp->{trace_terminals} = $ENV{MARPA_TRACE_TERMINALS} || $ENV{MARPA_TRACE} || 0;
$recceOptionsHashp->{trace_values} = $ENV{MARPA_TRACE_VALUES} || $ENV{MARPA_TRACE} || 0;
$recceOptionsHashp->{trace_file_handle} = $MARPA_TRACE_FILE_HANDLE;
$self->{recce} = Marpa::R2::Scanless::R->new($recceOptionsHashp);
bless($self, $class);
return $self;
}
sub value {
return $_[0]->{recce}->value(@_[1..$#_]);
}
sub read {
return $_[0]->{recce}->read(@_[1..$#_]);
}
sub resume {
return $_[0]->{recce}->resume(@_[1..$#_]);
}
sub last_completed {
return $_[0]->{recce}->last_completed(@_[1..$#_]);
}
sub last_completed_range {
return $_[0]->{recce}->last_completed_range(@_[1..$#_]);
}
sub range_to_string {
return $_[0]->{recce}->range_to_string(@_[1..$#_]);
}
sub event {
return $_[0]->{recce}->event(@_[1..$#_]);
}
sub events {
return $_[0]->{recce}->events();
}
sub pause_lexeme {
return $_[0]->{recce}->pause_lexeme(@_[1..$#_]);
}
sub pause_span {
return $_[0]->{recce}->pause_span(@_[1..$#_]);
}
sub literal {
return $_[0]->{recce}->literal(@_[1..$#_]);
}
sub line_column {
return $_[0]->{recce}->line_column(@_[1..$#_]);
}
sub substring {
return $_[0]->{recce}->substring(@_[1..$#_]);
}
sub lexeme_read {
return $_[0]->{recce}->lexeme_read(@_[1..$#_]);
}
sub current_g1_location {
return $_[0]->{recce}->current_g1_location(@_[1..$#_]);
}
sub g1_location_to_span {
return $_[0]->{recce}->g1_location_to_span(@_[1..$#_]);
}
sub terminals_expected {
return $_[0]->{recce}->terminals_expected(@_[1..$#_]);
}
sub show_progress {
return $_[0]->{recce}->show_progress(@_[1..$#_]);
}
sub progress {
return $_[0]->{recce}->progress(@_[1..$#_]);
}
sub grammar {
return $_[0]->{grammar};
}
sub recce {
return $_[0]->{grammar};
}
1;
__END__
=pod
=encoding utf-8
=head1 NAME
MarpaX::Languages::ECMAScript::AST::Impl - Implementation of Marpa's interface
=head1 VERSION
version 0.001
=head1 SYNOPSIS
use strict;
use warnings FATAL => 'all';
use MarpaX::Languages::ECMAScript::AST::Impl;
my $marpaImpl = MarpaX::Languages::ECMAScript::AST::Impl->new();
=head1 DESCRIPTION
This modules implements all needed Marpa calls using its Scanless interface. Please be aware that logging is done via Log::Any.
=head1 SUBROUTINES/METHODS
=head2 new($class, $grammarOptionsHashp, $recceOptionsHashp)
Instantiate a new object. Takes as parameter two references to hashes: the grammar options, the recognizer options. In the recognizer, there is a grammar internal option that will be forced to the grammar object. If the environment variable MARPA_TRACE_TERMINALS is set to a true value, then internal Marpa trace on terminals is activated. If the environment MARPA_TRACE_VALUES is set to a true value, then internal Marpa trace on values is activated. If the environment variable MARPA_TRACE is set to a true value, then both terminals and values internal Marpa traces are activated.
=head2 value($self)
Returns Marpa's recognizer's value.
=head2 read($self, $inputp)
Returns Marpa's recognizer's read. Argument is a reference to input.
=head2 resume($self)
Returns Marpa's recognizer's resume.
=head2 last_completed($self, $symbol)
Returns Marpa's recognizer's last_completed for symbol $symbol.
=head2 last_completed_range($self, $symbol)
Returns Marpa's recognizer's last_completed_range for symbol $symbol.
=head2 range_to_string($self, $start, $end)
Returns Marpa's recognizer's range_to_string for a start value of $start and an end value of $end.
=head2 event($self, $eventNumber)
Returns Marpa's recognizer's event for event number $eventNumber.
=head2 events($self)
Returns Marpa's recognizer's events.
=head2 pause_lexeme($self)
Returns Marpa's recognizer's pause_lexeme.
=head2 pause_span($self)
Returns Marpa's recognizer's pause_span.
=head2 literal($self, $start, $length)
Returns Marpa's recognizer's literal.
=head2 line_column($self, $start)
Returns Marpa's recognizer's line_column at eventual $start location in the input stream. Default location is current location.
=head2 substring($self, $start, $length)
Returns Marpa's recognizer's substring corresponding to g1 span ($start, $length).
=head2 lexeme_read($self, $lexeme, $start, $length, $value)
Returns Marpa's recognizer's lexeme_read for lexeme $lexeme, at start position $start, length $length and value $value.
=head2 current_g1_location($self)
Returns Marpa's recognizer's current_g1_location.
=head2 g1_location_to_span($self, $g1)
Returns Marpa's recognizer's g1_location_to_span for a g1 location $g1.
=head2 terminals_expected($self)
Returns Marpa's recognizer's terminals_expected.
=head2 show_progress($self)
Returns Marpa's recognizer's show_progress.
=head2 progress($self)
Returns Marpa's recognizer's progress.
=head2 grammar($self)
Returns a Marpa::R2::Scanless::G object of this grammar.
=head2 recce($self)
Returns a Marpa::R2::Scanless::R object of this grammar.
=head1 SEE ALSO
L<Marpa::R2::Scanless::G>
L<Marpa::R2::Scanless::R>
=head1 AUTHOR
Jean-Damien Durand <jeandamiendurand@free.fr>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by Jean-Damien Durand.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut