=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::Grammar - Pegex Grammar Base Class
=head1 SYNOPSIS
Define a Pegex grammar (for the Foo syntax):
package Pegex::Foo::Grammar;
use base 'Pegex::Base';
extends 'Pegex::Grammar';
has text => q{
foo: bar baz
... rest of Foo grammar ...
};
then use it to parse some Foo:
use Pegex::Parser;
my $parse_tree = Pegex::Parser->new(
grammar => 'Pegex::Foo::Grammar',
receiver => 'Pegex::Tree',
)->parse('my/file.foo');
=head1 DESCRIPTION
Pegex::Grammar is a base class for defining your own Pegex grammar classes.
You just need to provide the grammar view the C<text> or the C<file>
attributes.
When L<Pegex::Parser> uses your grammar, it will want it in the tree
(compiled) form, so L<Pegex::Grammar> provides automatic compilation support.
=head1 PROPERTIES AND METHODS
=over
=item tree
This is the data structure containing the compiled grammar for your syntax. It
is usually produced by C<Pegex::Compiler>. You can inline it in the C<tree>
method, or else the C<make_tree> method will be called to produce it.
The C<make_tree> method will call on Pegex::Compiler to compile the C<text>
property by default. You can define your own C<make_tree> method to do
override this behavior.
Often times you will want to generate your own Pegex::Grammar subclasses in an
automated fashion. The Pegex and TestML modules do this to be performant. This
also allows you to keep your grammar text in a separate file, and often in a
separate repository, so it can be shared by multiple programming language's
module implementations.
See
L<https://github.com/ingydotnet/pegex-pgx> and L<https://github.com/ingydotnet/pegex-pm/blob/master/lib/Pegex/Pegex/Grammar.pm>.
=item text
This is simply the text of your grammar, if you define this, you should
(probably) not define the C<tree> property. This grammar text will be
automatically compiled when the C<tree> is required.
=item file
This is the file where your Pegex grammar lives. It is usually used when you
are making a Pegex module. The path is relative to your top level module
directory.
=item make_tree
This method is called when the grammar needs the compiled version.
=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