All pastes #1730896 Raw Edit

unl2udl.pl

public text v1 · immutable
#1730896 ·published 2009-12-29 17:46 UTC
rendered paste body
#!/usr/bin/perl

use strict;

my $ue = qr/(i|k|s|\..|r|v|d|\`(?-1)(?-1))/s;

my $lang = 'underload';

sub u2u {
    my $expr = shift;
    $expr eq 'i' and return '(^a)';
    $expr eq 'k' and return '(^aa(^!)~*a)';
    $expr eq 's' and return
        '(^a(^aa:)~*(aa~*(~^^^)*a~)*a(^a)~*(~*(aa~*(~^^^)*a*(~^^^)*^a)*a)*a)';
    $expr =~ /^\.(.)$/s and
        return ($lang eq 'underload' ? "(^a($1)S)" : "(^a\"\Q$1\E\"O)");
    $expr eq 'r' and
        return ($lang eq 'underload' ? "(^a(\n)S)" : "(^a\"\\n\"O)");
    $expr eq 'v' and return '((~^!a(:^)*a):^)';
    $expr eq 'd' and return '((^a)~*(^)*a)';
    $expr =~ /^\`(?'a'$ue)(?'b'$ue)$/s and do {
        my $a = $+{a};
        my $b = $+{b};
        $a = &u2u($a);
        $b = &u2u($b);
        return "($a)($b)~^^^";
    };
    die "'$expr' is not a valid Unlambda expression";
}

$_ = <>;
chomp;
print u2u($_), "\n";