Bigtop
view release on metacpan or search on metacpan
lib/Bigtop/Parser.pm view on Meta::CPAN
package Bigtop::Parser;
use strict; use warnings;
use File::Find;
use File::Spec;
use Data::Dumper;
use Carp;
use Bigtop::Grammar;
use Bigtop::Keywords;
use Bigtop::ScriptHelp;
# These don't work since we moved grammar to bigtop.grammar.
# $::RD_TRACE = 1;
# $::RD_HINT = 1;
# Set them in Grammar.pm directly under the use Parse::RecDescent statement.
my $ident_counter = 0;
my $parser;
my %valid_keywords;
my %keyword_for;
#---------------------------------------------------------------------
# Methods which add and validate keywords in the grammar
#---------------------------------------------------------------------
sub add_valid_keywords {
my $class = shift;
my $type = shift;
my $caller = caller( 0 );
my %callers;
KEYWORD:
foreach my $statement ( @_ ) {
my $keyword = $statement->{keyword};
my $seen_it = $valid_keywords{ $type }{ $keyword };
$valid_keywords{ $type }{ $keyword }++;
next KEYWORD if ( defined $statement->{type}
and $statement->{type} eq 'deprecated' );
push @{ $keyword_for{ $type }{ $keyword }{ callers } }, $caller;
next KEYWORD if $seen_it;
push @{ $keyword_for{ $type }{ statements } }, $statement;
}
}
BEGIN {
Bigtop::Parser->add_valid_keywords(
Bigtop::Keywords->get_docs_for(
'config',
qw( engine template_engine plugins base_dir app_dir )
)
);
# register no_gen as a keyword for (almost) all block types
# sequence and table are not included since SQL happens all at once
foreach my $keyword_type qw( app controller method ) {
Bigtop::Parser->add_valid_keywords(
Bigtop::Keywords->get_docs_for(
$keyword_type,
'no_gen',
)
);
}
# to allow a table to be described, but to be omitted from either
# a Model or SQL output
Bigtop::Parser->add_valid_keywords(
Bigtop::Keywords->get_docs_for( 'table', 'not_for' )
);
Bigtop::Parser->add_valid_keywords(
Bigtop::Keywords->get_docs_for( 'field', 'not_for' )
);
}
sub is_valid_keyword {
my $class = shift;
my $type = shift;
my $keyword = shift;
return $valid_keywords{$type}{$keyword};
}
( run in 2.141 seconds using v1.01-cache-2.11-cpan-98e64b0badf )