Reassign variables with set, bugfixes for strings shorter than allocated size

This commit is contained in:
2025-10-06 18:33:53 +11:00
parent ae37d8deab
commit e180adea8c
5 changed files with 58 additions and 11 deletions

View File

@@ -1,9 +1,18 @@
## create var *bytes = Value ## create var *bytes = Value
Creates the variable "var" with a set number of bytes allocated to it, and initialises its value. Creates the variable "var" with a set number of bytes allocated to it, and initialises its value.
**IMPORTANT:** The number of bytes cannot be modified later.
Example: `create var *5 = "Hello"` Example: `create var *5 = "Hello"`
## print var ## print var
Prints the value of `var` to the console, where `var` is a variable. Prints the value of `var` to the console, where `var` is a variable.
Example: `print var`
## set var = Value
Changes the value of an already created value.
Example `set var = "World"`

View File

@@ -1,6 +1,6 @@
## Welcome to BrainAssembly! ## Welcome to BrainAssembly!
BrainAssembly is a language that compiles to Brainfuck. Similar to Assembly languages, it has simple syntax, and is designed to make Brainfuck easier to write code for. Enjoy! BrainAssembly is a language that compiles to Brainfuck. Similar to Assembly languages, it has simple syntax, and is designed to make Brainfuck easier to write code for. Heavily inspired by Ground. Enjoy!
To run: To run:
@@ -14,4 +14,6 @@ git clone https://chookspace.com/DiamondNether90/BrainAssembly
python3 src/main.py path/to/file.basm path/to/file.bf python3 src/main.py path/to/file.basm path/to/file.bf
``` ```
(Replace path/to/file.basm with the actual path to your desired .basm file, and replace path/to/file.bf with where you want the compiled file to be created.)
This will create or replace the contents of path/to/file.bf with the compiled BrainAssembly code. This will create or replace the contents of path/to/file.bf with the compiled BrainAssembly code.

View File

@@ -3,6 +3,7 @@ from sys import argv
file = open(argv[1]).readlines(); file = open(argv[1]).readlines();
bfcode = "" bfcode = ""
variables = [] variables = []
varbytes = []
def removeChar(str, char): def removeChar(str, char):
ans = "" ans = ""
for i in str: for i in str:
@@ -29,6 +30,7 @@ for i in file:
bfcode += ">>>>>>>>>>>>[[>>]>>]" bfcode += ">>>>>>>>>>>>[[>>]>>]"
bytes = int(removeChar(i.split("*", 1)[1].split("=", 1)[0], " ")) bytes = int(removeChar(i.split("*", 1)[1].split("=", 1)[0], " "))
varbytes.append(bytes)
a = i.split("=", 1)[1] a = i.split("=", 1)[1]
if (a[0] == " "): if (a[0] == " "):
@@ -47,7 +49,9 @@ for i in file:
bfcode += "+++>" bfcode += "+++>"
if (j < len(a)): if (j < len(a)):
bfcode += "+" * ord(a[j]) + ">" bfcode += "+" * ord(a[j]) + ">"
bfcode += "<[[<<]<<]<<<<<<<<<" else:
bfcode += ">"
bfcode += "<<[[<<]<<]<<<<<<<<"
variables.append(i.split(" ")[1].split("*")[0]) variables.append(i.split(" ")[1].split("*")[0])
@@ -57,11 +61,43 @@ for i in file:
a = removeEnd(a, 1) a = removeEnd(a, 1)
if (a in variables): if (a in variables):
bfcode += ">>>>>>>>>>>>" bfcode += ">>>>>>>>>>>>"
for i in range(variables.index(a)): for j in range(variables.index(a)):
bfcode += "[>>]>>" bfcode += "[>>]>>"
bfcode += "[>.>]<<[[<<]<<]<<<<<<<<++++++++++.[-]" bfcode += "[>.>]<<[[<<]<<]<<<<<<<<++++++++++.[-]"
else: else:
raise NameError(f"Could not find variable {a}") raise NameError(f"Could not find variable {a}")
elif (i.split(" ")[0] == "set"):
a = i.split(" ")[1]
if a[len(a)-1] == "\n":
a = removeEnd(a, 1)
if (a in variables):
bfcode += ">>>>>>>>>>>>"
for j in range(variables.index(a)):
bfcode += "[>>]>>"
for j in range(varbytes[variables.index(a)]):
bfcode += "[-]>[-]>"
for j in range(varbytes[variables.index(a)]):
bfcode += "<<"
# Get type
val = i.split("=", 1)[1].split(" ", 1)[1]
if (val[len(val)-1] == "\n"):
val = removeEnd(val, 1)
if (val[0] == "\"") & (val[len(val)-1] == "\""):
val = val.split("\"", 1)[1]
val = removeEnd(val, 1)
type = "string"
if (type == "string"):
for j in range(varbytes[variables.index(a)]):
bfcode += "+++>"
if (j >= len(val)):
bfcode += ">"
else:
bfcode += "+" * ord(val[j]) + ">"
bfcode += "<<[[<<]<<]<<<<<<<<"
else:
raise NameError(f"Could not find variable {a}")
elif ((i != "\n") & (i != "")): elif ((i != "\n") & (i != "")):
raise ValueError(f"Invalid Command") raise ValueError(f"Invalid Command")

View File

@@ -1,7 +1,8 @@
create hello *5 = "Hello, world!" create str1 *5 = "Hello"
create world *5 = "World, hello!" create str2 *10 = "Hello!"
create sigma *6 = "Sigma!"
print hello print str1
print world print str2
print sigma
set str1 = "World!"
print str1

View File

@@ -1 +0,0 @@
>>>>>>>>>>>>[[>>]>>]+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><[[<<]<<]<<<<<<<<<>>>>>>>>>>>>[[>>]>>]+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><[[<<]<<]<<<<<<<<<>>>>>>>>>>>>[[>>]>>]+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++><[[<<]<<]<<<<<<<<<>>>>>>>>>>>>[>.>]<<[[<<]<<]<<<<<<<<++++++++++.[-]>>>>>>>>>>>>[>>]>>[>.>]<<[[<<]<<]<<<<<<<<++++++++++.[-]>>>>>>>>>>>>[>>]>>[>>]>>[>.>]<<[[<<]<<]<<<<<<<<++++++++++.[-]