No description or website provided.
Perl
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib/Acme
t
Changes
MANIFEST
MANIFEST.SKIP
Makefile.PL
README

README

NAME
    Acme::Brainfucktory - Virtual machine generator for brainf*ck-like
    language

SYNOPSIS
        use Acme::Brainfucktory;
    
        my $bf = Acme::Brainfucktory->new();
    
        $bf->code(<<CODE); # copied from Language::BF
        ++++++++++[>+++++++>++++++++++>+++>+<<<<-]
        >++.>+.+++++++..+++.>++.<<+++++++++++++++.>
        .+++.------.--------.>+.>.
        CODE
    
        $bf->run; # "Hello World!\n"
    
    
        # from http://d.hatena.ne.jp/tokuhirom/20041015/p14
        my $nekomimi = Acme::Brainfucktory->new( {
            optable => {
                'ネコミミ!'                    => '>',
                'ネコミミモード'                => '<',
                'おにいさま'                    => '+',
                '私のしもべー'                  => '-',
                'や・く・そ・く・よ'            => '.',
                'フルフルフルムーン'            => ',',
                'キスキス…'                    => '[',
                'キス…したくなっちゃった…'    => ']',
            },
        } );
    
        $nekomimi->code(<<CODE);
        おにいさまおにいさまおにいさまおにいさまキスキス…
        ネコミミ!おにいさまおにいさま
        おにいさまおにいさまキスキス…ネコミミ!
        おにいさまおにいさまおにいさまおにいさま
        ネコミミ!おにいさまおにいさまおにいさま
        おにいさまおにいさまおにいさまネコミミ!
        おにいさまおにいさまネコミミモードネコミミモード
        ネコミミモード私のしもべー
        キス…したくなっちゃった…ネコミミ!
        おにいさまおにいさまネコミミ!
        おにいさま
        ネコミミモードネコミミモードネコミミモード
        私のしもべーキス…したくなっちゃった…
        ネコミミ!ネコミミ!や・く・そ・く・よネコミミ!
        おにいさまや・く・そ・く・よ
        おにいさまおにいさまおにいさまおにいさまおにいさま
        おにいさまおにいさま
        や・く・そ・く・よや・く・そ・く・よ
        おにいさまおにいさまおにいさま
        や・く・そ・く・よ
        ネコミミ!や・く・そ・く・よ
        ネコミミモードネコミミモード私のしもべー
        ネコミミモード
        おにいさまおにいさまおにいさまおにいさまキスキス…ネコミミ!
        おにいさまおにいさまおにいさまおにいさまネコミミモード
        私のしもべーキス…したくなっちゃった…ネコミミ!
        や・く・そ・く・よネコミミ!や・く・そ・く・よおにいさまおにいさま
        おにいさま
        や・く・そ・く・よ私のしもべー私のしもべー私のしもべー私のしもべー
        私のしもべー
        私のしもべーや・く・そ・く・よ私のしもべー私のしもべー私のしもべー
        私のしもべー
        私のしもべー私のしもべー私のしもべー私のしもべーや・く・そ・く・よ
        ネコミミ!
        おにいさまや・く・そ・く・よ
        CODE
    
        $nekomimi->run; # "Hello World!";
    
    
        my $ook = Acme::Brainfucktory->new( {
            preprocess => sub {
                my $code_ref = shift;
                $$code_ref =~ s{Ook(.) Ook(.)}{$1$2}g;
            },
            optable => {
                '.?' => '>',
                '?.' => '<',
                '..' => '+',
                '!!' => '-',
                '!.' => '.',
                '.!' => ',',
                '!?' => '[',
                '?!' => ']',
            },
        } );
    
        $ook->code(<<CODE);
        Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
        Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
        Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
        Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
        Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
        Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
        Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
        Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
        Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
        Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
        Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
        Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
        Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
        Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
        Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
        Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
        Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
        Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. 
        CODE
    
        $ook->run; # "Hello World!";
    
    
        # exported feature!
        $bf = brainf*ck;

DESCRIPTION
    Welcome to Brainf*ck factory.

    This module constructs virtual machines for your brainf*ck-like
    languages.

METHODS
    Most of the concepts and source codes come from Language::BF.

  new
        $bf = Acme::Brainfucktory->new();
    
        $bf = Acme::Brainfucktory->new( $hashref );

    Constructs a brainf*ck virtual machine.

    Options:

    optable
        A list of opcode for your terrible language. This is a hash
        reference must hold values:

        ">", "<", "+", "-", ".", ",", "[", "]",

            my $your_lang = Acme::Brainfucktory->new( {
                optable => {
                    1 => '>',
                    2 => '<',
                    3 => '+',
                    4 => '-',
                    5 => '.',
                    6 => ',',
                    7 => '[',
                    8 => ']',
                }
            } );

        By default Brainf*ck.

    preprocess
        A subroutine reference that is executed on "code" method being
        called.

            $ook = Acme::Brainfucktory->new( {
                preprocess => sub {
                    my $code = ${ $_[0] };
                    ${ $_[0] } =~ s{Ook(.) Ook(.)}{$1$2}g;
                },
                optable => {
                    '.?' => '>',
                    '?.' => '<',
                    '..' => '+',
                    '!!' => '-',
                    '!.' => '.',
                    '.!' => ',',
                    '!?' => '[',
                    '?!' => ']',
                },
            } );

        Running subroutine takes a scalar reference holds a parsed code.

        By default it deletes all characters exception for opcodes.

    input
        Sets a file handle for input.

    output
        Sets a file handle for output.

    code
        Your terrible code in your terrible language.

  new_from_file
        $bf = Acme::Brainfucktory->new_from_file( $hashref, $filename );

    Constructs a brainf*ck virtual machine from BF source file.

  input
        $bf = $bf->input( $fh );

    Sets input file handle. "STDIN" by default. Returns the object itself.

  output
        $bf = $bf->output( $fh );

    Sets output file handle. "STDOUT" by default.

  optable
        $bf = $bf->optable( $hashref );

    Sets a list of opcode for your terrible language. This is a hash
    reference must hold values:

    ">", "<", "+", "-", ".", ",", "[", "]",

    Returns the object itself.

  preprocess
        $bf = $bf->preprocses( $subref );

    Sets a subroutine reference that is executed on "code" method being
    called. Returns the object itself.

    Running subroutine takes a scalar reference holds a parsed code.

        $subref = sub {
            my $code_ref = shift;
            $$code_ref =~ s{Ook(.) Ook(.)}{$1$2}g;
        };

    By default it deletes all characters exception for opcodes.

  code
        $bf = $bf->code( $code );

    Set your terrible code in your terrible language! Returns the object
    itself.

  parse
    Alias to "code".

  run
        $bf->run( $boolean );

    Run your terrible code in your terrible language!

    By default it runs perl-compiled code. By setting $mode to non-zero
    value, it runs as an iterpreter.

SPECIAL FEATURE
    "brainf*ck" is imported. You can now write "brainf*ck" in your code!

        $bf = brainf*ck; # Acme::Brainfucktory object

SEE ALSO
    Language::BF, Regexp::Assemble, Term::ReadKey

COPYRIGHT AND LICENSE
    Copyright 2010 by Makamaka Hannyaharamitu

    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.