Код: Выделить всё
tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}']
Код: Выделить всё
def process_scopes(tokenized_output: list, condition: bool, position: int):
index = position
if condition == False:
for token in tokenized_output:
index += 1
if tokenized_output[index] == "}":
print(token)
break
else:
for token in tokenized_output:
index += 1
if isinstance(token, list):
index = process_scopes(token, condition, index)
else:
print(token)
position = index
return position
- , это список, содержащий информацию об областях, он должен выглядеть примерно так:
Код: Выделить всё
tokenized_output
Код: Выделить всё
tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}']
- — это логическое значение, которое оценивает, являются ли условия оператора if истинными или нет. Если true, оно выполняет содержимое вложенного списка внутри {}, в данном случае должен выполнить:
Код: Выделить всё
condition
Код: Выделить всё
['PRINT', '(', '"', 'hello', '"', ')']
- , это целочисленное значение, которое указывает индекс списка tokenized_output, в котором оно находится, а также причина, по которой мне нужно новое предложение о том, как хранить эти области, как при вызове этой функции, переменная, передаваемая в аргумент позиции, является позицией другого списка, который аналогичен этому списку областей, но в нем нет вложенных списков, и он будет выглядеть примерно так:
Код: Выделить всё
position
Код: Выделить всё
['IF', 'a', '>', 'b', '{', 'PRINT', '(', '"', 'hello', '"', ')', '}']
Поэтому мне нужна помощь в том, как «обновить» таким способом, который я использую для определения областей, и вместо этого запросить способ, который работает даже когда индекс, взятый из «невложенного списка», переносится в другой список (список, в котором определены области действия), он все равно будет давать тот же результат.Вот еще один пример аргумента условия:
(^ — указатель позиции)
если условие имеет значение False:
отсюда:
Код: Выделить всё
tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}']
^
Код: Выделить всё
tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}']
^
если условие истинно:
отсюда:
Код: Выделить всё
tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}']
^
Код: Выделить всё
tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}']
^ ^ ^ ^ ^ ^
Код: Выделить всё
tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}']
^
Поэтому я попробовал код, указанный ранее:
Код: Выделить всё
def process_scopes(tokenized_output: list, condition: bool, position: int):
index = position
if condition == False:
for token in tokenized_output:
index += 1
if tokenized_output[index] == "}":
print(token)
break
else:
for token in tokenized_output:
index += 1
if isinstance(token, list):
index = process_scopes(token, condition, index)
else:
print(token)
position = index
return position
Поэтому мне нужно либо решение, либо другой способ обработки фигурных скобок и областей видимости в моей программе.
Подробнее здесь: https://stackoverflow.com/questions/788 ... ets-scopes