Equal command

This commit is contained in:
2025-11-03 13:50:32 +11:00
parent 4bcbc6c650
commit e853195cc3
3 changed files with 98 additions and 4 deletions

View File

@@ -244,6 +244,92 @@ def generateCode(line: list[str], offset: int) -> str:
returnval += '<[<]' + '<' * (offset-1)
return returnval
elif keyword == 'equal':
if len(line) != 4:
error(f'Equal command requires 3 arguments (got {len(line)-1})')
returnval = '>' * offset + '[>]'
idx = getIndex(line[1])
for var in variables[:idx]:
if var.bytes >= 0:
returnval += '>' * (var.bytes+1)
elif var.bytes == -1:
returnval += '>[>]'
else:
error()
returnval += '>'
for i in range(4):
returnval += '[-'
returnval += '>' * (4-i)
for var in variables[(idx+1):]:
if var.bytes >= 0:
returnval += '>' * (var.bytes+1)
elif var.bytes == -1:
returnval += '>[>]'
else:
error()
returnval += '>' * (i+1) + '+' + '<' * (i+1)
for var in reversed(variables[(idx+1):]):
if var.bytes >= 0:
returnval += '<' * (var.bytes+1)
elif var.bytes == -1:
returnval += '<[<]'
else:
error()
returnval += '<<<<<+' + '>' * (i+1) + ']'
returnval += '<' * (i+1) + '[' + '>' * (i+1) + '+' + '<' * (i+1) + '-]' + '>' * (i+2)
# Copy the above, but subtract from duplicate
idx2 = getIndex(line[2])
for var in variables[(idx+1):idx2]:
if var.bytes >= 0:
returnval += '>' * (var.bytes+1)
elif var.bytes == -1:
returnval += '>[>]'
else:
error()
returnval += '>'
for i in range(4):
returnval += '[-'
returnval += '>' * (4-i)
for var in variables[(idx2+1):]:
if var.bytes >= 0:
returnval += '>' * (var.bytes+1)
elif var.bytes == -1:
returnval += '>[>]'
else:
error()
returnval += '>' * (i+1) + '-' + '<' * (i+1)
for var in reversed(variables[(idx2+1):]):
if var.bytes >= 0:
returnval += '<' * (var.bytes+1)
elif var.bytes == -1:
returnval += '<[<]'
else:
error()
returnval += '<<<<<+' + '>' * (i+1) + ']'
returnval += '<' * (i+1) + '[' + '>' * (i+1) + '+' + '<' * (i+1) + '-]' + '>' * (i+2)
for var in variables[(idx2+1):]:
if var.bytes >= 0:
returnval += '>' * (var.bytes+1)
elif var.bytes == -1:
returnval += '>[>]'
else:
error()
returnval += '>[<+>[-]]>[<<+>>[-]]>[<<<+>>>[-]]>[<<<<+>>>>[-]]<<<+<[>-<[-]]'
for var in reversed(variables):
if var.bytes >= 0:
returnval += '<' * (var.bytes+1)
elif var.bytes == -1:
returnval += '<[<]'
else:
error()
returnval += '<[<]' + '<' * (offset-1)
variables.append(Variable(line[3], 1, 0))
return returnval
elif keyword == 'if':
if len(line) != 2:
error(f'If command requires 1 argument (got {len(line)-1})')

View File

@@ -14,6 +14,8 @@ Print a string: `print name`
Increment an int: `inc name`
Check if two numbers are equal, and store the result in `cond`: `equal num1 num2 cond`
If statement:
```py
if bool

View File

@@ -1,7 +1,13 @@
int num1 796
string str1 -1 "Hello, world!"
int num 100
bool cond true
int num2 795
string str2 -1 "World, hello?"
equal num1 num2 cond
if cond
inc num
print str1
end if
inc num2
equal num1 num2 cond2
if cond2
print str2
end if