Don't quite understand... First of all, in most cases (languages), it is not allowed to have optional parameter in the middle, it should always be the last, or one of the last set of parameters all of which are optional. So for ABC, param3 should be optional
also.

Next, optionality is usually described in the declaration by special means, like default value, or keyword "optional". So, just describe the construct in a BNF rule...

You don't need to "describe" parameter section for you function like this; you should just use general LIST of parameters - using MakeStarList method - out of a single parameter definition. Look at examples, for ex. c# sample.