The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
# Internal
require 'p6rule.pl';
require 'emit.pl';
require 'p6prelude-cached.pl';
require 'p6primitives-cached.pl';
use interface;
# External
use IO::File;

# Process command line arguments
my $input_filename = shift || die "Missing arguments!";
my $output_filename = shift || die "Missing arguments!";

# Open the input file
my $input_file = IO::File->new($input_filename,'<') ||
  die 'Could not open the source file '.$input_filename;

# Read the input file
local $/ = undef;
my $source = <$input_file>;

# Compile the input file
my $match = grammar1::grammar->($source);
die 'Syntax error at !!'.$match->{tail}.'!!' if ($match->{tail});
my $code = Perl6Grammar::emit($match->{capture});

# Write down
my $output_file = IO::File->new($output_filename,'>') ||
    die 'Could not open the output file '.$output_filename;
print $output_file $code;