Я безуспешно искал реализацию Python, которая преобразует инфикс в префикс, который варьируется в достаточном количестве арифметических и логических операторов и заботится о его свойствах в хорошей реализации Python. В частности, меня интересуют операторы, которые появляются в условном предложении программы на C. (например, он преобразует a > 0 && b > 1
в префикс.
Поскольку я все еще новичок в Python, я был бы признателен, если бы кто-нибудь мог предложить мне реализацию или несколько советов по этому поводу.
Я нашел в Интернете реализацию, ссылку на которую я потерял (ниже), но она заботится только о более простых операторах. Я немного не знаю, как это сделать в этой версии, и если бы кто-нибудь знал версию, которая уже включала все операторы, я был бы признателен, чтобы избежать случайного игнорирования любого оператора.
Такая реализация также должна учитывать круглые скобки.
Пожалуйста, прокомментируйте, если вам нужна дополнительная информация!
Спасибо.
def parse(s):
for operator in ["+-", "*/"]:
depth = 0
for p in xrange(len(s) - 1, -1, -1):
if s[p] == ')': depth += 1
if s[p] == '(': depth -= 1
if not depth and s[p] in operator:
return [s[p]] + parse(s[:p]) + parse(s[p+1:])
s = s.strip()
if s[0] == '(':
return parse(s[1:-1])
return [s]