=pod

=for comment
DO NOT EDIT. This Pod was generated by Swim v0.1.48.
See http://github.com/ingydotnet/swim-pm#readme

=encoding utf8

=head1 NAME

Pegex::Parser - Pegex Parser Runtime

=head1 SYNOPSIS

    use Pegex::Parser;
    use SomeGrammarClass;
    use SomeReceiverClass;

    my $parser = Pegex::Parser->new(
        grammar => SomeGrammarClass->new,
        receiver => SomeReceiverClass->new,
    );

    my $result = $parser->parse($SomeInputText);

=head1 DESCRIPTION

Pegex::Parser is the Pegex component that provides the parsing engine
runtime. It requires a Grammar object and a Receiver object. It's C<parse()>
method takes an input that is expected to be matched by the grammar, and
applies the grammar rules to the input. As the grammar is applied, the
receiver is notified of matches. The receiver is free to do whatever it
wishes, but often times it builds the data into a structure that is commonly
known as a Parse Tree.

When the parse method is complete it returns whatever object the receiver
has provided as the final result. If the grammar fails to match the input
along the way, the parse method will throw an error with much information
about the failure.

=head1 ATTRIBUTES

The Pegex::Parser C<new> object constructor takes these attributes:

=over

=item C<grammar>

A Pegex::Grammar object. Required.

=item C<receiver>

A Pegex::Receiver object.

=item C<debug>

Boolean. Turn on debugging. Default false.

=item C<recursion_limit>

Integer. Recursion level to terminate on. Default 0 (off).

=item C<recursion_warn_limit>

Integer. Recursion level to warn on. Default 0 (off).

=item C<iteration_limit>

Integer. Number of matches to try before terminating. Default 0 (off).

=back

=head1 DEBUGGING

Pegex::Parser currently has 4 settings that are useful for debugging. These
can be set as Pegex::Parser object attributes, global variables or environment
variables:

=over

=item C<debug> or C<$Pegex::Parser::Debug> or C<$ENV{PERL_PEGEX_DEBUG}>

If set to a true value, it enables very useful trace messages for every
internal match operation.

=item C<recursion_limit> or C<Pegex::Parser::RecursionLimit> or C<$ENV{PERL_PEGEX_RECURSION_LIMIT}>

If set to a number greater than 0, Pegex::Parser will terminate after that
recursion level number is reached.

=item C<recursion_warn_limit> or C<Pegex::Parser::RecursionWarnLimit> or C<$ENV{PERL_PEGEX_RECURSION_WARN_LIMIT}>

If set to a number greater than 0, Pegex::Parser will issue a warning every
time that recursion level number is reached.

=item C<iteration_limit> or C<Pegex::Parser::IterationLimit> or C<$ENV{PERL_PEGEX_ITERATION_LIMIT}>

If set to a number greater than 0, Pegex::Parser will terminate after that
number of matches has been attempted.

=item C<debug_indent> or C<$Pegex::Parser::DebugIndent> or C<$ENV{PERL_PEGEX_DEBUG_INDENT}>

Tells the parser how many spaces should be used for indenting debugging
output. Default is 1.

=item C<debug_color> or C<$Pegex::Parser::DebugColor> or C<$ENV{PERL_PEGEX_DEBUG_COLOR}>

If enabled, it will color C<got> and C<not> events in the debugging output
(C<bright_green> and C<bright_red> respectively). Color will be enabled by
default for debugging. It requires L<Term::ANSIColor>.

=over

=item C<always> or C<1>

Color is enabled.

=item C<auto>

Color is enabled when STDERR is a tty.

=item C<never> or 0

Color is disabled.

=back

You can configure the specific colors used by appending them like this:

    PERL_PEGEX_DEBUG_COLOR='always, cyan bold, black on_yellow'

For available colors, see L<Term::ANSIColor>

=back

Note: Using these variables incurs a slight performance hit, but if you don't
      use them all the debugging code is optimized away.

=head1 SEE ALSO

=over

=item * L<Pegex::Grammar>

=item * L<Pegex::Receiver>

=back

=head1 AUTHOR

Ingy döt Net <ingy@cpan.org>

=head1 COPYRIGHT AND LICENSE

Copyright 2010-2020. Ingy döt Net.

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

See L<http://www.perl.com/perl/misc/Artistic.html>

=cut
