There are a few rules what we can combine. Obviously, we cannot write:
procedure Test; abstract;
begin
end;
we can only have something like this:
type
TMyClass = class
public
procedure Test; virtual; abstract;
end;
So an abstract can only appear after a virtual and the virtual (and override) can only appear for methods. Same for "reintroduce", "overload" and more. There are rather complex rules which are not modelled by this representation. For a syntax highlighter this might not be a problem, but it might, if someone wants to use it for more.