NAME
Pegex::Grammar - Pegex Grammar Base Class
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');
DESCRIPTION
Pegex::Grammar is a base class for defining your own Pegex grammar classes. You just need to provide the grammar view the text
or the file
attributes.
When Pegex::Parser uses your grammar, it will want it in the tree (compiled) form, so Pegex::Grammar provides automatic compilation support.
PROPERTIES AND METHODS
- tree
-
This is the data structure containing the compiled grammar for your syntax. It is usually produced by
Pegex::Compiler
. You can inline it in thetree
method, or else themake_tree
method will be called to produce it.The
make_tree
method will call on Pegex::Compiler to compile thetext
property by default. You can define your ownmake_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 https://github.com/ingydotnet/pegex-pgx and https://github.com/ingydotnet/pegex-pm/blob/master/lib/Pegex/Pegex/Grammar.pm.
- text
-
This is simply the text of your grammar, if you define this, you should (probably) not define the
tree
property. This grammar text will be automatically compiled when thetree
is required. - 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.
- make_tree
-
This method is called when the grammar needs the compiled version.
AUTHOR
Ingy döt Net <ingy@cpan.org>
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.