package main; # Usage: perl ./run-mp6.pl [] # If is not given it will read from stdin. use strict; use FindBin '$Bin'; use lib ("$Bin/lib5"); BEGIN { $::_V6_COMPILER_NAME = 'MiniPerl6'; $::_V6_COMPILER_VERSION = '0.003'; } use MiniPerl6::Perl5::Runtime; use MiniPerl6::Perl5::Match; package Main; use MiniPerl6::Grammar; use MiniPerl6::Perl5::Emitter; use MiniPerl6::Grammar::Regex; use MiniPerl6::Emitter::Token; my $source = join('', <> ); my $pos = 0; # Kludge - make an implicit Main explicit. $source = "class Main { $source }" if $source !~ /class/; # Kludge - remove "use v6-alpha;", which mp6 doesn't understand. $source =~ s/\buse\s*v6-alpha;//; my $perl5code = ""; $perl5code .= "# Do not edit this file - Generated by MiniPerl6\n"; $perl5code .= "use v5;"; $perl5code .= "use strict;"; $perl5code .= "use MiniPerl6::Perl5::Runtime;"; $perl5code .= "use MiniPerl6::Perl5::Match;"; while ( $pos < length( $source ) ) { my $p = MiniPerl6::Grammar->comp_unit($source, $pos); $perl5code .= join( ";\n", (map { $_->emit() } ($$p) )); $perl5code .= ";"; $pos = $p->to; } $perl5code .= "1;"; eval($perl5code);