alternation.pm
来自「这是一个DFA简化和生成LL(1)分析表的程序,自动生成表格及图形」· PM 代码 · 共 54 行
PM
54 行
#: Kid/AST/alternation.pm - generated from template/leftop.pm.tt
package alternation;
use strict;
use warnings;
#use Data::Dumper::Simple;
sub alternation {
my $self = shift;
if (!exists $self->{alternation}) {
my $rlist = $self->{'concat(s)'};
return nil->new if not $rlist;
my @concats = @$rlist;
my $concat = pop @concats;
my $alternation;
if (@concats) {
$alternation = bless {'concat(s)' => \@concats}, ref $self;
} else {
$alternation = nil->new;
}
$self->{alternation} = $alternation;
$self->{concat} = $concat;
#delete $self->{'concat(s)'};
#warn Dumper($self);
}
return $self->{alternation};
}
sub concat {
my $self = shift;
if (!exists $self->{concat}) {
$self->alternation;
}
if (@_) {
$self->{concat} = shift;
} else {
$self->{concat} || nil->new;
}
}
sub get_all {
my $list = shift;
my @elems;
while (ref $list eq 'alternation') {
unshift @elems, $list->concat;
$list = $list->alternation;
}
@elems;
}
1;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?