Я создал свой собственный язык программирования на Python, и на данный момент он использует систему, которая при обнаружении { создает перед ним список, примерно так: >
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
Он принимает аргумент условия, который является результатом работы программы, которая оценивает условия, заданные для оператора if (это не имеет значения). Но дело в том, что требуется три аргумента, каждый из которых имеет решающее значение для работы остальной части программы. вот описание каждого аргумента и того, что они делают:
— это логическое значение, которое оценивает, являются ли условия оператора if истинными или нет. Если true, оно выполняет содержимое вложенного списка внутри {}, в данном случае должен выполнить:
, это целочисленное значение, которое указывает индекс списка tokenized_output, в котором оно находится, а также причина, по которой мне нужно новое предложение о том, как хранить эти области, как при вызове этой функции, переменная, передаваемая в аргумент позиции, является позицией другого списка, который аналогичен этому списку областей, но в нем нет вложенных списков, и он будет выглядеть примерно так:
Это означает, что если я не передам позицию индекса, который находится в основном списке (первый список, не вложенный ни в какие другие списки), и если позиция этого индекса не находится перед появление любых вложенных списков (в этом случае 'IF', 'a', '>', 'b', '{' будут находиться до появления первого вложенного списка), индекс будет все перепутано.
Поэтому мне нужна помощь в том, как «обновить» таким способом, который я использую для определения областей, и вместо этого запросить способ, который работает даже когда индекс, взятый из «невложенного списка», переносится в другой список (список, в котором определены области действия), он все равно будет давать тот же результат.Вот еще один пример аргумента условия:
(^ — указатель позиции)
если условие имеет значение False:
отсюда:
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
И проблема в том, что иногда он возвращает индекс, значительно превышающий длину списка, а иногда просто выходит из всей программы, не выполняя код, который появляется после вызова функции.
Поэтому мне нужно либо решение, либо другой способ обработки фигурных скобок и областей видимости в моей программе.
Я создал свой собственный язык программирования на Python, и на данный момент он использует систему, которая при обнаружении { создает перед ним список, примерно так: > [code]tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}'] [/code] Я написал программу, использующую этот стиль списка: [code]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 [/code] Он принимает аргумент условия, который является результатом работы программы, которая оценивает условия, заданные для оператора if (это не имеет значения). Но дело в том, что требуется три аргумента, каждый из которых имеет решающее значение для работы остальной части программы. вот описание каждого аргумента и того, что они делают: [list] [*][code]tokenized_output[/code], это список, содержащий информацию об областях, он должен выглядеть примерно так: [/list] [code]tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}'] [/code] [list] [*][code]condition[/code] — это логическое значение, которое оценивает, являются ли условия оператора if истинными или нет. Если true, оно выполняет содержимое вложенного списка внутри {}, в данном случае должен выполнить: [/list] [code]['PRINT', '(', '"', 'hello', '"', ')'] [/code] [list] [*][code]position[/code], это целочисленное значение, которое указывает индекс списка tokenized_output, в котором оно находится, а также причина, по которой мне нужно новое предложение о том, как хранить эти области, как при вызове этой функции, переменная, передаваемая в аргумент позиции, является позицией другого списка, который аналогичен этому списку областей, но в нем нет вложенных списков, и он будет выглядеть примерно так: [/list] [code]['IF', 'a', '>', 'b', '{', 'PRINT', '(', '"', 'hello', '"', ')', '}'] [/code] Это означает, что если я не передам позицию индекса, который находится в основном списке (первый список, не вложенный ни в какие другие списки), и если позиция этого индекса не находится перед появление любых вложенных списков (в этом случае 'IF', 'a', '>', 'b', '{' будут находиться до появления первого вложенного списка), индекс будет все перепутано. Поэтому мне нужна помощь в том, как «обновить» таким способом, который я использую для определения областей, и вместо этого запросить способ, который работает даже когда индекс, взятый из «невложенного списка», переносится в другой список (список, в котором определены области действия), он все равно будет давать тот же результат.Вот еще один пример аргумента условия: (^ — указатель позиции) если условие имеет значение False: отсюда: [code]tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}'] ^ [/code] сюда: [code]tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}'] ^ [/code] пропуск ['PRINT', '(', '"', 'hello', '"', ')'] если условие истинно: отсюда: [code]tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}'] ^ [/code] выполните все это: [code]tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}'] ^ ^ ^ ^ ^ ^ [/code] сюда: [code]tokens = ['IF', 'a', '>', 'b', '{', ['PRINT', '(', '"', 'hello', '"', ')'], '}'] ^ [/code] Это означает, что вам нужно вернуть значение позиции после завершения. Поэтому я попробовал код, указанный ранее: [code]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 [/code] И проблема в том, что иногда он возвращает индекс, [b]значительно[/b] превышающий длину списка, а иногда просто выходит из всей программы, не выполняя код, который появляется после вызова функции. Поэтому мне нужно либо решение, либо другой способ обработки фигурных скобок и областей видимости в моей программе.
Я пытаюсь проанализировать следующий формат с помощью PHP:
// This is a comment
{
this is an entry
}
{
this is another entry
}
{
entry
{entry within entry}
{entry within entry}
}
Может быть, это просто недостаток кофеина, но я не могу придумать...
Я изучаю, как f-строки Python обрабатывают форматирование, и наткнулся на следующий синтаксис:
a = 5.123
b = 2.456
width = 10
result = f The result is {(a + b):
Я изучаю, как f-строки Python обрабатывают форматирование, и наткнулся на следующий синтаксис:
a = 5.123
b = 2.456
width = 10
result = f The result is {(a + b):