Execute Brain****/Elena: Difference between revisions

Content added Content deleted
No edit summary
No edit summary
Line 7: Line 7:
#import extensions'scripting.
#import extensions'scripting.


class BFTape
// --- Tape ---

#class BFTape
{
{
#field theArray.
object theArray.
#field thePointer.
object thePointer.
#field theBrackets.
object theBrackets.


#constructor new:aLength
constructor new:aLength
[
[
theArray := Array new:aLength set &every: (&int:n) [ Integer new:0 ].
theArray := Array new:aLength set &every: (&int:n) [ Integer new:0 ].
Line 24: Line 22:
]
]


#method append
append
[
[
(theArray@thePointer) += 1.
(theArray@thePointer) += 1.
]
]
#method reduce
reduce
[
[
(theArray@thePointer) -= 1.
(theArray@thePointer) -= 1.
]
]
#method next
next
[
[
thePointer += 1.
thePointer += 1.
]
]


#method previous
previous
[
[
thePointer -= 1.
thePointer -= 1.
]
]
#method push : bookmark
push : bookmark
[
[
theBrackets push:bookmark.
theBrackets push:bookmark.
]
]
#method pop
pop
=> theBrackets.
=> theBrackets.
#method input
input
[
[
theArray@thePointer := console readChar toInt.
theArray@thePointer := console readChar toInt.
]
]
#method output
output
[
[
console write:((theArray@thePointer) toChar).
console write:((theArray@thePointer) toChar).
]
]


#method check = theArray@thePointer != 0.
check = theArray@thePointer != 0.
}
}


#symbol program =
program =
[
[
console
console
writeLine:"++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.".
writeLine:"++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.".
#var program := scriptEngine
var program := scriptEngine
load &path:"rules.es"
load &path:"rules.es"
eval:"++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.".
eval:"++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.".
Line 78: Line 76:
The grammar:
The grammar:
<lang elena>[[
<lang elena>[[
[[
#grammar transform
#grammar cf
#grammar cf


#define start ::= <= [ 2 %"system'dynamic'tapeOp.var&args$[]" => commands <= * system'dynamic'Tape ] =>;
#define start ::= <= ( > += " 2" += " %""system'dynamic'tapeOp.var&args$[]""" => commands <= " *" "system'dynamic'Tape" "=" == ) =>;


#define commands ::= command commands;
#define commands ::= command commands;
Line 86: Line 86:
#define commands ::= $eof;
#define commands ::= $eof;


#define command ::= <= %"output[0]" => ".";
#define command ::= <= += " %""output[0]"" " => ".";
#define command ::= <= %"input[0]" => ",";
#define command ::= <= += " %""input[0]"" " => ",";
#define command ::= <= %"previous[0]" => "<";
#define command ::= <= += " %""previous[0]"" " => "<";
#define command ::= <= %"next[0]" => ">";
#define command ::= <= += " %""next[0]"" " => ">";
#define command ::= <= %"append[0]" => "+";
#define command ::= <= += " %""append[0]"" " => "+";
#define command ::= <= %"reduce[0]" => "-";
#define command ::= <= += " %""reduce[0]"" " => "-";
#define command ::= <= -2 %"system'dynamic'tapeOp.ptr&args$[]" 1 %"system'dynamic'tapeOp.stack&args$[]" %"push[1]" => "[";
#define command ::= <= += " -2" += " %""system'dynamic'tapeOp.ptr&args$[]"" " += " 1" += " %""system'dynamic'tapeOp.stack&args$[]"" "
+= "%""push[1]"" " => "[";
#define command ::= <= 0 %"system'dynamic'tapeOp.stack&args$[]" %"check[0]" 1 %"system'dynamic'tapeOp.stack&args$[]" %"pop[0]" %"system'dynamic'tapeOp.jumpif&args$[13]" => "]";
#define command ::= <= += " 0" += " %""system'dynamic'tapeOp.stack&args$[]"" " += " %""check[0]"" " += " 1" += "
%""system'dynamic'tapeOp.stack&args$[]"" " += " %""pop[0]"" " += " %""system'dynamic'tapeOp.jumpif&args$[13]"" " => "]";


#define comment ::= " " comments;
#define comment ::= " " comments;
Line 104: Line 106:


#mode symbolic;
#mode symbolic;
]]

]]</lang>
]]</lang>