Reassign variables with set, bugfixes for strings shorter than allocated size
This commit is contained in:
@@ -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"`
|
||||||
@@ -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.
|
||||||
40
src/main.py
40
src/main.py
@@ -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")
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -1 +0,0 @@
|
|||||||
>>>>>>>>>>>>[[>>]>>]+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><[[<<]<<]<<<<<<<<<>>>>>>>>>>>>[[>>]>>]+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><[[<<]<<]<<<<<<<<<>>>>>>>>>>>>[[>>]>>]+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>+++++++++++++++++++++++++++++++++><[[<<]<<]<<<<<<<<<>>>>>>>>>>>>[>.>]<<[[<<]<<]<<<<<<<<++++++++++.[-]>>>>>>>>>>>>[>>]>>[>.>]<<[[<<]<<]<<<<<<<<++++++++++.[-]>>>>>>>>>>>>[>>]>>[>>]>>[>.>]<<[[<<]<<]<<<<<<<<++++++++++.[-]
|
|
||||||
Reference in New Issue
Block a user