Operation

Operation is an esoteric programming language that relies on folder metadata, created by kiken.
==Overview==
===Memory===
Memory in Operation consists of a stack. Each item is a single byte.
The memory starts with pushed onto the stack. Once the stack is empty, program halts.
==Execution==
Executing programs in Operation is done in this order:
* First, the interpreter takes in the file's inode and preforms a split.
* Then, the interpreter uses the splitted inode and preforms a merge with the file's size (in byte count).
* With the merged data, a control is then preformed.
* Finally, with the data, an interpretation is preformed.
===Splitting===
If the file contents are empty, program halts. Else, the following process is repeated for every digit of the input number:
* The input is taken.
:* If the input digit is even, then push a 0 onto the stack.
:* If the input digit is odd, then push a 1 onto the stack.
Afterwards, the stack is transformed with the following process:
* The stack is split into groups of bytes and turned into chars with their corresponding ASCII value. If the group of bits are unable to form a byte, then form a number with the bits and translate into a character.
* The stack is then merged into one, long string and the end character is cut off.
===Merging===
After the splitting is completed, then a merge is preformed. The merging process is as so:
* Two inputs are taken.
* The two inputs are then merged, with each character from the first input precedes the second. For example, if the first input was and the second input was , then the merged product would be: . However, if one input is longer than the other, then the input is cut off to match the length of the other.
* The resulting data is then converted from base-35 into quinary.
===Controlling===
Controlling is a process which takes in one input.
The first input should be a number in quinary.
If the setgid bit exists, then we use this table to convert the quinary into code:
Quinary	Converted code
0 	
1 	
2 	whitespace
3 	
4 	
Else, use this table to convert into code:
Quinary	Converted code
0 	
1 	
2 	
3 	
4 	whitespace
For examples, if the input was:
 01324
then assuming the setgid bit exists, it would translate to:
 +==+= +
else, it would translate to:
 ==++=+
===Interpretation===
The interpretation is the last process of executing an Operation script. The input consists of two characters, and . There is a single factor, the operation, and it is an integer that begins at one, and wraps modulo 3.
Operations are increased using .
====Operation 1====
In operation 1, the command does the following:
* If the command is at an even position in the code (first character in the code is position 0, next character position 1, etc.), then this character is saved as a jump point with an ID of the amount of spaces preceding the command.
* If the command is at an odd position in the code, then jump to the jump point with the ID of the amount of spaces (subtract one) preceding it if the byte at the top of the stack is 0 when converted to decimal.
====Operation 2====
In operation 2, the command does the following:
* If the command is at an even position in the code, then add to the item at the top of the stack.
* If the command is at an odd position in the code, then pop the top of the stack.
====Operation 3====
In operation 3, the command does the following:
* If the command is at an even position in the code, then push onto the stack.
* If the command is at an odd position in the code, then output the top of the stack as ASCII.
Once the instruction pointer reaches the end of the code, program halts.
==Computational class==
I believe Operation to be at least higher than a finite-state machine. This can be proved by making a direct translation from the language brainfuck to Operation's intermediate code:
* If the program is on operation 1, the following translations can be made:
Operation(ish)	brainfuck
 	
 	
* If the program is on operation 2, the following translations can be made:
Operation(ish)	brainfuck
 	
(assuming the character is at an even position in the code)
* If the program is on operation 3, the following translations can be made:
Operation(ish)	brainfuck
 	
(assuming the character is at an odd position in the code)
However, since Operation uses a stack and not a tape, Operation is likely to be a push-down automaton.
==Implementations==
There is an unfinished implementation here.
Category:Languages Category:Push-down automata Category:Thematic Category:2024 Category:Implemented Category:Stack-based