2.8 KiB
Compiling and inspecting programs
compile
compile(program, enableExtensions = true)
program
: String containing the program to compileenableExtensions
: Whether to recognize:;#
or ignore them
Returns: An array holding flat IR
Example: let compiled = compile(',[>+<,]>:');
prettifyIR
prettifyIR(ir)
ir
: An array holding any type of IR used by Gir
Returns: A string suitable for creating IR listings
Example: console.log(prettifyIR(compiled));
Executing programs
Gir executes the flattened IR in a simple virtual machine. runVM()
doesn't
mutate a state object that is passed to it but rather returns a new one.
VM state object
property | default value | description |
---|---|---|
program |
(set by caller) | compile() d program |
ip |
0 |
Instruction pointer |
memory |
Map {} |
Tape |
tapeHead |
0 |
Tape head position |
input |
(set by caller) | encodeUTF8() d input |
output |
[] |
Output (needs to be decodeUTF8() d) |
onEof |
0 / (set by caller) |
What to do in case of EOF¹ |
¹ If onEof
is null the cell will not be changed, but otherwise the cell
will be set to the value of onEof
newVM
newVM(program, input, onEof = 0)
program
: An array holding flat IRinput
: An array of integers which is interpreted as a byte streamonEof
: See description ofonEof
field of the VM state object
Returns: VM state object
Example: let vm = newVM(compile('.[,[-].]'), encodeUTF('foobar'), null);
runVM
runVM(vm, maxCycles = null)
vm
: VM state objectmaxCycles
: Number of cycles the program is allowed to run.null
means no limit
Returns: An object like following
property | description |
---|---|
state | VM state object of the state after runVM() has completed |
complete | Boolean describing whether the program completed or not |
cycles | How many cycles did the program run during this invocation of runVM() |
intParseFailed | Boolean describing if runVM() exited because ; failed to parse an int |
breakPointReached | Boolean describing if runVM() exited because it hit # |
lastIndex | Last cell that was accessed by the VM |
Example: let output = decodeUTF8(runVM(vm, 400000).state.output);
Helper functions
encodeUTF8
encodeUTF8(string)
- string: A javascript string
Returns: An array of integers that interpreted as bytes encode that string
Example: let encoded = encodeUTF8(input);
decodeUTF8
decodeUTF8(encoded)
- encoded: An array of integers
Returns: A string encoded by that array
Example: let output = decodeUTF8(result.state.output);