A whole Brainf*** Compiler

I guess I really fathom kirupa’s rules, but I wanted to do this for a very long time:

A compiler/interpreter in Flash! :jailbreak

the Language is Brainf uck (BF, and I hope the mod’s don’t sue me for that name: I didn’t invent it)

(but forget about the speed thing - seriously: a lot worse with my compiler)

since the Forum’s swearing blocker blocked any attempt to post a link to anything containing BF, I suggest you to google for
Brainf uck wikipedia

here a list of the commands

Character 	Meaning
>
	increment the pointer (to point to the next cell to the right).
<
	decrement the pointer (to point to the next cell to the left).
+
	increment (increase by one) the byte at the pointer.
-
	decrement (decrease by one) the byte at the pointer.
.
	output the value of the byte at the pointer.
,
	accept one byte of input, storing its value in the byte at the pointer.
[
	jump forward to the command after the corresponding ] if the byte at the pointer is zero.
]
	jump back to the command after the corresponding [ if the byte at the pointer is nonzero.

I hope you will be abled to keep the commands :wink:

so here it comes:

for (i=(a = ["code (press Shift+Enter to compile)","input", "output","dynamic", "input","input", "status","dynamic"]).length-1;i>0;i-=2) {
	_root.createTextField(a[i-1]+"title", 10+i+1, 10, 240*(Math.log((i-1)/2+1))+10, 500, 20).text = a[i-1];
	_root.createTextField(a[i-1], 10+i, 10, 240*(Math.log((i-1)/2+1))+30, 500, 85/((i-1)/2+0.6)).type =a*;
	_root[a[i-1]].border = true;
}

_root.onEnterFrame = function() {
	((run == ((_root[a[0]].multiline=1)-(_root[a[2]].multiline=1)) || run == undefined) && (Key.isDown(Key.SHIFT) && Key.isDown(Key.ENTER))) ? pocket=[(n=20)-20, (maxIterations=10000)-10000, awaitingInput=0, (run=1)-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] : 1;
	if (run && awaitingInput == 1) {
		_root[a[6]].text = "awaiting input";
		((Key.isDown(Key.ENTER) && _root[a[4]].text.length>0)) ? inputstack=_root[a[4]].text : 1;
		((Key.isDown(Key.ENTER) && _root[a[4]].text.length>0)) ? _root[a[4]].text="" : 1;
		(inputstack.length>0) ? pocket[n]=inputstack.charCodeAt(0) : 1;
		(inputstack.length>0) ? awaitingInput=2 : 1;
		(inputstack.length>0) ? inputstack=inputstack.substring(1) : 1;
	} else {
		for (((awaitingInput == 0) && (run == 1) && (Key.isDown(Key.SHIFT) && Key.isDown(Key.ENTER))) ? _root[a[(i=0)+2]].text="" : 1; (run == 1) && (maxIterations>0) && (i<_root[a[0]].text.length) && ((awaitingInput == 2) || (awaitingInput == 0 && (Key.isDown(Key.SHIFT) && Key.isDown(Key.ENTER)))); i++) {
			(_root[a[0]].text.charAt(i) == ">") ? n++ : loops=0;
			(_root[a[0]].text.charAt(i) == "<") ? n-- : loops=0;
			(_root[a[0]].text.charAt(i) == "+") ? pocket[n]++ : 0;
			(_root[a[0]].text.charAt(i) == "-") ? pocket[n]-- : 0;
			(_root[a[0]].text.charAt(i) == ",") ? awaitingInput=1 : _root[a[3]].text="compiling";
			(_root[a[0]].text.charAt(i) == ".") ? _root[a[2]].text += String.fromCharCode(pocket[n]) : _root[a[6]].text="compiling";
			for (maxIterations--; (maxIterations>0) && (pocket[n] != 0) && (_root[a[0]].text.charAt(i) == "]" || loops>0) && (i>=0); i--) {
				(_root[a[0]].text.charAt(i) == "]") ? loops++ : 1;
				(_root[a[0]].text.charAt(i) == "[") ? loops-- : 1;
			}
			(maxIterations>0) ? _root[a[6]].text="finished" : _root[a[6]].text="safety quit, more than "+10000+" iterations";
		}
		(i == _root[a[0]].text.length || !(maxIterations>0)) ? run=0 : 1;
	}
};

I hope this is valid :slight_smile:

try to use this link:

-> http://www.digitalhalo.de/kirupa/bfc_18.html&lt;-

see also
[COLOR=“DarkOrange”]->sharks
->flower chain[/COLOR]

the attached is a little slow, and seems to have problems with shift+enter :frowning: