#!/usr/bin/env perl
# This is an example Pegex parser that parses itself! Each word is captured and
# uppercased, then added to the tree.
#
# This is a good script to start with to try new ideas, as it is
# self-contained.
use Pegex::Parser;
use FindBin '$Script';
use IO::All;
use YAML::XS;
# Pegex parsing needs:
#
# * A parser object
# * A grammar object
# * A receiver object
# * Some input to parse
#
# Try the debug option to see everything in detail.
sub main {
my $parser = Pegex::Parser->new(
grammar => SelfGrammar->new,
receiver => SelfTree->new,
debug => 1,
);
my $input = io->file($Script)->all;
my $tree = $parser->parse($input);
print YAML::XS::Dump $tree;
}
# A custom grammar class:
{
package SelfGrammar;
use Pegex::Base;
extends 'Pegex::Grammar';
use constant text => <<'...';
self: word* %% +
word: / ( NS+ ) /
...
}
# A custom receiver class:
{
package SelfTree;
use Pegex::Base;
extends 'Pegex::Tree';
sub got_word {
my ($self, $got) = @_;
uc $got;
}
}
main(@ARGV);