All pastes #943984 Raw Edit

Unnamed

public text v1 · immutable
·published 2008-03-15 19:22 UTC
rendered paste body
# An interpreter for minidei.
# Written by Elliott Hird, 2008.
# Released into the public domain.

$/ = undef;
$_ = <>;
/\[|\]/ and die "[] found in input";
$_ = "[] ".$_;
my $q = qr/\[((?:(?:R)|[^ \[\]]+)*)\]/;
my $w = qr/([^ ]+)/;
{
  s/\s+/ /g;
  s/^\s+|\s+$//g;
  print $_, "\n";
  s/$w dei/$1 [$1]/ and redo;
  s/$q wrap/[[$1]]/ and redo;
  s/$q drop// and redo;
  s/$q dup/[$1] [$1]/ and redo;
  s/$q $q swap/[$2] [$1]/ and redo;
  s/$q i/$1/ and redo;
  s/$q $q compose/[$1 $2]/ and redo;
}

#--

 Converts a minidei+[] program into a minidei program.
# Written by Elliott Hird, 2008.
# Released into the public domain.

$/ = undef;
$_ = <>;
my $q = qr/(?:(?:R)|[^ \[\]]+)*/;
my $w = qr/[^ ]+/;
my $e = qr/($w)|(\[$q\])/;
{
  s/\s+/ /g;
  s/^\s+|\s+$|\[\s+|\s+\]//g;
  print $_, "\n";
  s/\[$w $w\]/[$1] [$2] compose/ and redo;
  s/\[\[($e+)\]\]/[$1] wrap/ and redo;
  s/\[wrap\]/dup wrap dei swap drop/ and redo;
  s/\[drop\]/dup drop dei/ and redo;
  s/\[dup\]/dup dei swap drop/ and redo;
  s/\[swap\]/dup swap dei swap drop/ and redo;
  s/\[i\]/wrap i dei/ and redo;
  s/\[compose\]/dup dup compose dei swap drop/ and redo;
}