Я работаю в некотором коде Python для анализа этого файла .h:
#include <limits.h>
// Offsets
// UINT_MAX == 4294967295 (Note: do not remove the comments, they are used by parser.py)
#define ID_OFFSET UINT_MAX - (1 << 6) // ID_OFFSET == 4294967231
#define CALL_NR_OFFSET ID_OFFSET - (1 << 20) // CALL_NR_OFFSET == 4293918655
// Range of lower 2^20 numbers is reserved for debug statements.
#define DEBUG_OFFSET (2 << 20) // DEBUG_OFFSET == 1048576
// IDs for jpeg library functions
#define INIT_HEADER_VLD_ID ID_OFFSET + 1
#define HEADER_VLD_ID ID_OFFSET + 2
#define IQZZ_ID ID_OFFSET + 3
#define IDCT_ID ID_OFFSET + 4
#define CC_ID ID_OFFSET + 5
#define RASTER_ID ID_OFFSET + 6
// Core frequencies
#define MB1_FREQ 2.5 // in Mhz
#define MB2_FREQ 2.5 // in Mhz
#define MB3_FREQ 3 // in Mhz
#define MB4_FREQ 3 // in Mhz
У меня есть несколько регулярных выражений, подобных этому:
uint_max_re = re.compile('UINT_MAX\s+=+\s+(\d+)\s+') # https://regexr.com/3pmk5
id_offset_re = re.compile('ID_OFFSET\s+=+\s+(\d+)') # https://regexr.com/3pmn8
call_nr_offset_re = re.compile('CALL_NR_OFFSET\s+=+\s+(\d+)') # https://regexr.com/3pmnh
debug_offset_re = re.compile('DEBUG_OFFSET\s+=+\s+(\d+)') # https://regexr.com/3pmnk
function_ids_re = re.compile('#define\s+(\w+)\s+ID_OFFSET\s+\+\s+(\d)') # https://regexr.com/3pmkt
core_freqs_re = re.compile('#define MB(\d+)_FREQ\s+(\d[.\d]*)') # https://regexr.com/3pml6
def parse_wrapper_params():
"This parses the wrapper_params.h file and returns a dictionary with function_id as key and function_name as value"
with open(wrapper_params_file, 'r') as f:
uint_max = int(uint_max_re.findall(f.read())[0])
with open(wrapper_params_file, 'r') as f:
id_offset = int(id_offset_re.findall(f.read())[0])
with open(wrapper_params_file, 'r') as f:
call_nr_offset = int(call_nr_offset_re.findall(f.read())[0])
with open(wrapper_params_file, 'r') as f:
debug_offset = int(debug_offset_re.findall(f.read())[0])
with open(wrapper_params_file, 'r') as f:
function_ids = function_ids_re.findall(f.read())
with open(wrapper_params_file, 'r') as f:
core_freqs = core_freqs_re.findall(f.read())
return {
'uint_max': uint_max,
'id_offset': id_offset,
'call_nr_offset': call_nr_offset,
'debug_offset': debug_offset,
'function_ids': {int(id_offset) + int(function_id): function_name.lower() for function_name, function_id in function_ids},
'core_freqs': {int(core): freq for core, freq in core_freqs}
}
Теперь это довольно медленно, поэтомуЯ ищу способ сделать это только с одним with open(wrapper_params_file, 'r') as f:
, но если я уберу второй, регулярное выражение ничего не найдет.
Любая помощь приветствуется.Благодаря.