I was trying to debug this error in my code and I noticed something weird:
if I did the function as if the parameter was a string, it would tell me its a Token type
if I did the function as if the parameter was a Token, it would tell me its a string type
has this ever happened to y'all???
if I did the function as if the parameter was a string, it would tell me its a Token type
if I did the function as if the parameter was a Token, it would tell me its a string type
has this ever happened to y'all???
class Token:
def __init__(self, type, value=None):
self.type = type
self.value = value
def __repr__(self):
return f'{self.type}: {self.value}' if self.value != None else f'{self.type}'
class Lexer:
def __init__(self, line):
self.line = line
def getTokens(self):
tokens = []
save = ''
for i in range(len(self.line)):
char = self.line[i]
save += char
if save == '0':
tokens.append(Token('TT_BINARY', 0))
save = ''
elif save == '1':
tokens.append(Token('TT_BINARY', 1))
save = ''
elif save == ':':
tokens.append(Token('TT_SETSLOT'))
save = ''
elif save == 'S':
tokens.append(Token('TT_VARIABLE'))
save = ''
elif save == ' ' and i != 0:
tokens.append(Token('TT_SPACE'))
save = ''
return tokens
def execute(self):
tokens = self.getTokens()
saveTokens = []
# Stage 1: Group Binary
binarySave = ''
binaryLoading = False
for token in tokens:
if token.type == 'TT_BINARY' and not binaryLoading:
binaryLoading = True
binarySave += str(token.value)
elif token.type == 'TT_BINARY':
binarySave += str(token.value)
else:
binaryLoading = False
if binarySave != '': saveTokens.append(Token('TT_GBINARY', binarySave))
saveTokens.append(token)
binarySave = ''
if binarySave != '':
saveTokens.append(Token('TT_GBINARY', binarySave))
tokens = saveTokens
saveTokens = []
# Stage 2: Replacing Variables
skip = False
for i in range(len(tokens)):
token = tokens[i]
if skip:
skip = False
break
if token.type == 'TT_VARIABLE':
saveTokens.append(system.slots[System.convert_binary(tokens[i+1])])
skip = True
else:
saveTokens.append(token)
tokens = saveTokens
saveTokens = []
for i in range(len(tokens)):
token = tokens[i]
if token.type == 'TT_SETSLOT':
system.slots[System.convert_binary(tokens[i-1].value)] = tokens[i+1]
class System:
def __init__(self, script):
self.script = script
self.lexer = Lexer(None)
self.slots = {}
for i in range(256):
self.slots[i] = ''
@staticmethod
def convert_binary(binary):
print(type(binary))
if isinstance(binary, str): reversed = binary[::-1]
if isinstance(binary.value, str): reversed = binary.value[::-1]
rv = 0
for i in range(len(reversed)):
if reversed[i] == '1':
rv += 2 ** i
return rv
def run(self):
for line in self.script:
self.lexer.line = line
self.lexer.execute()
system = System([
'11:110'
'0:S11'
])
system.run()
print(system.slots)
