#!/usr/bin/env perl use strict; use warnings; use File::Temp; my %command = ( '>' => '++p;', '<' => '--p;', '+' => '++*p;', '-' => '--*p;', '.' => 'putchar(*p);', ',' => '*p=getchar();', '[' => 'while (*p) {', ']' => '}' ); my $memsize = 1024**2; # 1 MiB my $src = do { local $/; my $s = <>; $s; }; my @commands = (); for my $c ( split //, $src ) { my $b = $command{$c} or next; push @commands, $b; } print < #define A $memsize int main(){ char a[A] = {0}; char *p=a; @{[ join "\n", @commands ]} } EOT