Ich weiss nicht...so ein Parser ist doch schon Overkill.
Das Vorhandensein von Parameter 1 bis 11 lässt sich leicht als Boolean-Array abbilden.
Und die verbalen Regeln lassen sich über if-Bedingungen formulieren.
Delphi-Quellcode:
type
TParamExists = array[1..11] of Boolean;
procedure CheckParams(param : TParamExists);
var
c : integer;
begin
c := 0;
if param[1] then Inc(c);
if param[9] then Inc(c);
if param[10] then Inc(c);
if param[11] then Inc(c);
// Prüfe Mindestanforderung
if c = 0 then
raise EParam.Create('Es muss mindestens einer der Parameter 1,9, 10 oder 11 angegeben werden')
else if c > 1 then
raise EParam.Create('Parameter 1,9, 10 und 11 dürfen nicht gemeinsam verwendet werden')
if param[7] and not param[6] then
raise EParam.Create('Verwendung von Parmeter 7 nur möglich, wenn auch Parameter 6 vorhanden ist');
// hier weitere Regeln
...
end;