Вот действительно взломанный парсер, который делает то, что вы хотите.
Он работает, вызывая 'eval' для анализируемого текста, сопоставляя все идентификаторы с функцией, которая возвращает свой первый аргумент (я полагаю, это то, что вы хотите, учитывая ваш пример).
class FakeFunction(object):
def __init__(self, name):
self.name = name
def __call__(self, *args):
return args[0]
def __str__(self):
return self.name
class FakeGlobals(dict):
def __getitem__(self, x):
return FakeFunction(x)
def ExtractBaseFieldName(x):
return eval(x, FakeGlobals())
print ExtractBaseFieldName('ltrim(rtrim(to_char(base_field_name, format)))')