Grammar-Graph
view release on metacpan or search on metacpan
lib/Grammar/Graph.pm view on Meta::CPAN
$self->g->add_edge($_, $dst)
for $self->g->predecessors($src);
}
sub _copy_successors {
my ($self, $src, $dst) = @_;
$self->g->add_edge($dst, $_)
for $self->g->successors($src);
}
sub _find_endpoints {
my ($self, $id) = @_;
my $symbols = $self->symbol_table;
my $start = $symbols->{$id}{start_vertex};
my $final = $symbols->{$id}{final_vertex};
return ($start, $final);
}
#####################################################################
lib/Grammar/Graph.pm view on Meta::CPAN
my $p1 = Grammar::Graph::Start->new(
partner => $v2, name => $name);
my $p2 = Grammar::Graph::Final->new(
partner => $v1, name => $name);
$self->set_vertex_label($v1, $p1);
$self->set_vertex_label($v2, $p2);
my ($start, $final) = $self->_find_endpoints($id);
$self->_copy_predecessors($v, $v1);
$self->_copy_successors($start, $v1);
$self->_copy_successors($v, $v2);
$self->_copy_predecessors($final, $v2);
graph_delete_vertex_fast($self->g, $v);
}
lib/Grammar/Graph.pm view on Meta::CPAN
my ($class, $formal, $shortname, %options) = @_;
my $self = $class->new;
_add_to_automaton($formal, $self);
_delete_not_allowed($self);
fa_remove_useless_epsilons($self, $self->g->vertices);
_delete_unreachables($self);
my $id = _find_id_by_shortname($self, $shortname);
my ($start_vertex, $final_vertex) = _find_endpoints($self, $id);
$self->_set_start_vertex($start_vertex);
$self->_set_final_vertex($final_vertex);
$self->fa_prelude_postlude($shortname);
return $self;
}
#####################################################################
( run in 0.870 second using v1.01-cache-2.11-cpan-2b1a40005be )