Files
devops/perl/Examples/Chap8/alternate-cont
2025-09-17 16:08:16 +08:00

27 lines
435 B
Plaintext

###
### alternate-continuation
###
## Chapter 8 section 8.1
sub alternate {
my @p = @_;
return parser { return () } if @p == 0;
return $p[0] if @p == 1;
my $p;
$p = parser {
my ($input, $continuation) = @_;
for (@p) {
if (my ($v) = $_->($input, $continuation)) {
return $v;
}
}
return; # Failure
};
$N{$p} = "(" . join(" | ", map $N{$_}, @p) . ")";
return $p;
}