Equal command
This commit is contained in:
@@ -244,6 +244,92 @@ def generateCode(line: list[str], offset: int) -> str:
|
|||||||
|
|
||||||
returnval += '<[<]' + '<' * (offset-1)
|
returnval += '<[<]' + '<' * (offset-1)
|
||||||
return returnval
|
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':
|
elif keyword == 'if':
|
||||||
if len(line) != 2:
|
if len(line) != 2:
|
||||||
error(f'If command requires 1 argument (got {len(line)-1})')
|
error(f'If command requires 1 argument (got {len(line)-1})')
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ Print a string: `print name`
|
|||||||
|
|
||||||
Increment an int: `inc name`
|
Increment an int: `inc name`
|
||||||
|
|
||||||
|
Check if two numbers are equal, and store the result in `cond`: `equal num1 num2 cond`
|
||||||
|
|
||||||
If statement:
|
If statement:
|
||||||
```py
|
```py
|
||||||
if bool
|
if bool
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
|
int num1 796
|
||||||
string str1 -1 "Hello, world!"
|
string str1 -1 "Hello, world!"
|
||||||
int num 100
|
int num2 795
|
||||||
bool cond true
|
string str2 -1 "World, hello?"
|
||||||
|
equal num1 num2 cond
|
||||||
if cond
|
if cond
|
||||||
inc num
|
print str1
|
||||||
|
end if
|
||||||
|
inc num2
|
||||||
|
equal num1 num2 cond2
|
||||||
|
if cond2
|
||||||
|
print str2
|
||||||
end if
|
end if
|
||||||
Reference in New Issue
Block a user