Я пытаюсь извлечь функции и заголовки функций из некоторых файлов исходного кода.Вот пример типа кода:
################################################################################
# test module
#
# Description : Test module
#
DATABASE test
###
# Global Vars
GLOBALS
DEFINE G_test_string STRING
END GLOBALS
###
# Modular Vars
DEFINE M_counter INTEGER
###
# Constants
CONSTANT MAX_ARR_SIZE = 100
##################################
# Alternative header
##################################
FUNCTION test_function_1()
DEFINE F_x INTEGER
LET F_x = 1
RETURN F_x
END FUNCTION
###################################
# Function:
# This is a test function
#
# Parameters:
# in - test
#
# Returns:
# out - result
#
FUNCTION test_function_2( P_in_var )
DEFINE P_in_var INTEGER
DEFINE F_out_var INTEGER
LET F_out_var = P_in_var
RETURN F_out_var
END FUNCTION
FUNCTION test_init_array()
DEFINE F_array ARRAY[ MAX_ARR_SIZE ] OF INTEGER
DEFINE F_element INTEGER
FOR F_element = 1 TO MAX_ARR_SIZE
LET F_array[ F_element ] = F_element * F_element
END FOR
END FUNCTION
Функции могут иметь или не иметь заголовок над ними.Я пытаюсь захватить источник функции, заголовок функции, имя функции и любые параметры, переданные в функцию в группах.Вот выражение, которое я придумал (я делаю это с использованием регулярных выражений .Net и тестирую с использованием Regex Hero):
^([#]{0,1}.*?)(FUNCTION\s+(.*?)[(](.*?)[)].*?END FUNCTION)
Это работает нормально для всех, кроме первой функции (test_function_1) вфайл.Первоначальная группировка для test_function_1 захватывает все, начиная с первой строки (в верхней части исходного файла) и заканчивая функцией FUNCTION test_function_1.Я понимаю, что это потому, что в файле есть # для других комментариев, но я хочу только захватить заголовок функции.