Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
NBFC(1) 		   Chaos Contributed Software			 NBFC(1)

NAME
     nbfc -- The new brainfuck compiler

SYNOPSIS
     nbfc [options] file

DESCRIPTION
     nbfc  is  a new, completely portable compiler for the brainfuck programming
     language. It will generate and compile C code or as an option a Java appli-
     cation.

     nbfc is quite different from the original brainfuck compiler  by  the  lan-
     guage's inventor Urban Mueller:

     -	 It's portable. The original bfc was for the Amiga only. nbfc should run
     on any unix-like system.

     -	 It uses standard tools for its implementation and doesn't try to obfus-
     cate the code.

     -	 It can compile to C and supports the ''write once, run anywhere'' con-
     cept with	its capability to generate Java applications.

OPTIONS
     -o file
	 Generate  an executable by the name of file. If the -j switch is given,
	 this will be the name of the Java Class generated.

     -k  Keep generated intermediate code (C or Java). The default is to  delete
	 the  .c  or .java file that was generated by the compiler and just keep
	 the executable or the .class file, respectively.

     -j  Generate and compile a Java class instead of a C  executable.	The  de-
	 fault is to use C as an intermediate language.

     -v  Be  verbose.  By invoking this switch, nbfc will print out lots of mes-
	 sages about the state of compilation.

     -g  Don't compile, just generate intermediate file (C or Java). This can be
	 used for debugging. This also tells the compiler no to delete the  gen-
	 erated intermediate file, as if the -k option was given.

     -c  Display the copying license. The license is BSD-style and very liberal.

     -h  Display a short help screen.

INVOCATION
     When  called  without  any  options, nbfc will translate the brainfuck file
     given on the command line to C and call a C compiler  to  produce	an  exe-
     cutable.

     The  executable  will have the name bf.out (this can be changed with the -o
     option). The intermediate C file always has the name bf.out.c and	will  be
     deleted if the -k option is not present.

     When  using Java as the intermediate language, the default name for the ap-
     plication	is  bf.out.class,  the	default  name  for  the  Java  file   is
     bf.out.java.  Both  the class name and the intermediate Java code file name
     can be changed with the -o option.

THE LANGUAGE
     brainfuck is a simple enough language to include the entire  official  lan-
     guage  describtion  in  this  man	page. The following is from the original
     brainfuck distribution by Urban  Mueller  <umueller@amiga.physik.unizh.ch>,
     who also invented the language:

     ''The language brainfuck knows the following commands:

      Cmd  Effect				  Equivalent in C
      ---  ------				  ---------------
      +    Increases element under pointer	  array[p]++;
      -    Decrases element under pointer	  array[p]--;
      >    Increases pointer			  p++;
      <    Decreases pointer			  p--;
      [    Starts loop, counter under pointer	  while(array[p]) {
      ]    Indicates end of loop		  }
      .    Outputs ASCII code under pointer	  putchar(array[p]);
      ,    Reads char and stores ASCII under ptr  array[p]=getchar();

     All  other characters are ignored. The 30000 array elements and p are being
     initialized to zero at the beginning.  Now while this seems to be a  pretty
     useless language, it can be proven that it can compute every solvable math-
     ematical problem (if we ignore the array size limit and the executable size
     limit).''

BUGS
     There  is	no  checking  for  balanced brackets; if these are not balanced,
     strange things may happen. The  compiler  doesn't	optimize.  There  really
     should be a backend that generates assembly language code (at least for In-
     tel and PowerPC machines) instead of only C and Java.

AUTHOR
     Jens Ohlig <jo@koeln.ccc.de>

3rd Berkeley Distribution						 NBFC(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=nbfc&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help