bf17 icon

BF variable expander

bf17 | PRO | 03/19/19 10:43:39 PM UTC | 0 ⭐ | 367 👁️ | Never ⏰ | []
Python |

2.09 KB

|

None

|

0 👍

/

0 👎

#Pythonista 3.5
# bfvx - brainfuck variable expander - 20 Mar 2019
# variable usage as described here:
# https://esolangs.org/wiki/Brainfuck_algorithms
 
from array import array
array_size = 7 # set specifically for each program
val_array = array('I')
val_array = [ 0 for i in range(array_size)]
var_list = array('I')
var_list = [ 0 for i in range(array_size)]
P = 0 # the Data Pointer!
prog = ""
prog_formatted = ""
command_set = "<>+-,.[]"
prog = ""
counter = 0
P = 0 # the data pointer
move_P = 0 # +/- change in P, output ">" or "<"
value = 0
 
##### DEFINITIONS #####
def get_value(x): # return value (i.e. assigned cell) for a specific variable
    for i in range(array_size):
        if((var_list[i]) == x):
            return(val_array[i])
#######################
 
# load arrays with variable names and values
with open(input("bfv file: ")) as f:
    for each_line in f:
        if(each_line[0] == "="):
            var_list[counter] = (each_line.split()[1])
            val_array[counter] = (each_line.split()[2])
            counter += 1
 
# create program listing without variable declarations
with open("a.txt") as f:
    for each_line in f:
        if(each_line[0] != "="):
            prog = prog + each_line
 
# separate variables from commands
for i, each_char in enumerate(prog):
    if(each_char in command_set):
        prog_formatted = prog_formatted + ("\n" + each_char + "\n")
    else:
        prog_formatted = prog_formatted + each_char
 
# expand variables and print out program
for i in prog_formatted.splitlines():
    if((len(i)) == 0): # remove blank lines from output
        pass
    elif(i == ">"): # still need to process "<" and ">"
        P += 1
        print(">", end = "")
    elif(i == "<"):
        P -= 1
        print("<", end = "")
    elif(not(i in command_set)):
        value = get_value(i)
        move_P = int(value) - P
        P = P + move_P
        if(move_P < 0):
            print("<" * abs(move_P), end = "") # expand
        else:
            print(">" * move_P, end = "") # expand
    else:
        print(i, end = "")

Comments