Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
61
Task/Execute-SNUSP/Seed7/execute-snusp.seed7
Normal file
61
Task/Execute-SNUSP/Seed7/execute-snusp.seed7
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
$ include "seed7_05.s7i";
|
||||
|
||||
const proc: snusp (in string: sourceCode, in integer: memSize, inout file: input, inout file: output) is func
|
||||
local
|
||||
var array string: instructions is 0 times "";
|
||||
var array char: memory is 0 times ' ';
|
||||
var integer: dataPointer is 1;
|
||||
var integer: instrPtrRow is 0;
|
||||
var integer: instrPtrColumn is 0;
|
||||
var integer: rowDir is 0;
|
||||
var integer: columnDir is 1;
|
||||
var integer: helpDir is 0;
|
||||
var integer: row is 0;
|
||||
begin
|
||||
instructions := split(sourceCode, "\n");
|
||||
memory := memSize times '\0;';
|
||||
|
||||
for key row range instructions do
|
||||
if pos(instructions[row], '$') <> 0 then
|
||||
instrPtrRow := row;
|
||||
instrPtrColumn := pos(instructions[row], '$');
|
||||
end if;
|
||||
end for;
|
||||
|
||||
while instrPtrRow >= 1 and instrPtrRow <= length(instructions) and
|
||||
instrPtrColumn >= 1 and instrPtrColumn <= length(instructions[instrPtrRow]) do
|
||||
case instructions[instrPtrRow][instrPtrColumn] of
|
||||
when {'>'}: incr(dataPointer);
|
||||
when {'<'}: decr(dataPointer);
|
||||
when {'+'}: incr(memory[dataPointer]);
|
||||
when {'-'}: decr(memory[dataPointer]);
|
||||
when {'.'}: write(output, memory[dataPointer]);
|
||||
when {','}: memory[dataPointer] := getc(input);
|
||||
when {'/'}: helpDir := rowDir;
|
||||
rowDir := -columnDir;
|
||||
columnDir := -helpDir;
|
||||
when {'\\'}: helpDir := rowDir;
|
||||
rowDir := columnDir;
|
||||
columnDir := helpDir;
|
||||
when {'!'}: instrPtrRow +:= rowDir;
|
||||
instrPtrColumn +:= columnDir;
|
||||
when {'?'}: if memory[dataPointer] = '\0;' then
|
||||
instrPtrRow +:= rowDir;
|
||||
instrPtrColumn +:= columnDir;
|
||||
end if;
|
||||
end case;
|
||||
instrPtrRow +:= rowDir;
|
||||
instrPtrColumn +:= columnDir;
|
||||
end while;
|
||||
end func;
|
||||
|
||||
# SNUSP implementation of Hello World.
|
||||
const string: helloWorld is "/++++!/===========?\\>++.>+.+++++++..+++\\\n\
|
||||
\\\+++\\ | /+>+++++++>/ /++++++++++<<.++>./\n\
|
||||
\$+++/ | \\+++++++++>\\ \\+++++.>.+++.-----\\\n\
|
||||
\ \\==-<<<<+>+++/ /=.>.+>.--------.-/";
|
||||
|
||||
const proc: main is func
|
||||
begin
|
||||
snusp(helloWorld, 5, IN, OUT);
|
||||
end func;
|
||||
Loading…
Add table
Add a link
Reference in a new issue