Many years ago, I wrote the following regular expression:

^(?:\s*)(class)?(?:\s*)(constructor|destructor|function|operator|procedure)(?:\s*)(\w+\.)*(\w+)(?:\s*)((?:\()((?:\;?\s*)(const|var|out)?(?:\s*)&?(\w+)(,\s*\w+)*(?:\s*\:\s*)&?((\w*)\.)*(\w+)(\s*\=\s*(''.*''|\w+|\d+))?)*(?:\)))*((?:\:\s*)((\w*)\.)*(\w+))?;

to parse the Delphi syntax for declaration of a routine.

Since the addition of generics to Delphi, the above regular expression no longer works, if and when there is a generic type in the declaration.

If I treat a simple generic type declaration as just an identifier, then it would be simple to expand the above regular expression.

However, it seems to me that a generic type declaration can be yet another generic type expression.

More investigations needed, I think.