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 thetreemethod, or else themake_treemethod will be called to produce it.The
make_treemethod will call on Pegex::Compiler to compile thetextproperty by default. You can define your ownmake_treemethod 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
treeproperty. This grammar text will be automatically compiled when thetreeis 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.