Полная грамматика DSL-языка описания виртуальных итогов приведена ниже:

VirtualTotal -> Definition* ;
 
Definition -> DimensionDefinition
          | VariableDefinition
          | PredicateDefinition
          | GroupDefinition ;
 
DimensionDefinition -> "dim" Identifier "(" Identifier ")" ":" LocalizedStringList ;
 
VariableDefinition -> "var" Identifier ":" LocalizedStringList ;
 
PredicateDefinition -> "predicate" Identifier "(" IdentifierList ")" ":" Identifier ;
 
GroupDefinition -> "group" Identifier ":" LocalizedStringList GroupBody ;

 
GroupBody -> ParentGroupBody

          | CalculatedGroupBody ;

 
ParentGroupBody -> "children" ":" IdentifierList "end" ;

 
CalculatedGroupBody -> NoDetailsOpt GroupVariableList "end" ;

 
NoDetailsOpt -> "no" "details" | Empty ;
 
LanguageSpecifier -> "ru"

                  | "en"

                  | "iv" ;

 
LocalizedString -> LanguageSpecifier "(" LocalizedStringBody ")" ;

 
LocalizedStringList -> LocalizedString { "," LocalizedString };
 
GroupVariableList -> GroupVariable* ;

 
GroupVariable -> = "var" Identifier ColonOpt SourceDefinitionList ;

 
ColonOpt -> ":" | Empty ;

 
SourceDefinitionList -> SourceDefinition* ;

 
SourceDefinition -> TotalSource

                 | GroupSource ;

 
GroupSource -> "group" Identifier ":" VariableReference ;

 
TotalSource -> "total" Identifier ":" VariableReference TotalSourceOptionList ;
 
TotalSourceOptionList -> TotalSourceOption* ;

 
TotalSourceOption -> DimensionMapping

                  | DimensionFilter

                  | PredicateFilter ;

 
DimensionMapping -> DimToDimMapping

                 | DimToValueMapping ;

 
DimToDimMapping -> "dim" Identifier ":" Identifier DotIdentifierOpt ;

 
DotIdentifierOpt -> "." Identifier

                 | Empty ;

 
DimToValueMapping -> "value" Identifier ":" MappingValue ;

 
MappingValue -> Number

             | "none" ;

 
DimensionFilter -> "filter" Identifier DotIdentifierOpt ":" FilterBody ;

 
FilterBody -> ExceptOpt NumberList WithChildrenOpt ;

 
ExceptOpt -> "except"

          | Empty ;

 
NotOpt -> "not"

       | Empty ;

 
WithChildrenOpt -> "with" "descendants"

                | Empty ;

 
NumberList -> Number { "," Number } ;

 
PredicateFilter -> "predicate" ":" NotOpt Identifier "(" IdentifierList ")" ;

 
IdentifierList -> Identifier { "," Identifier } ;
 
VariableReference -> SignOpt Identifier ValueFilterOpt ;

 
SignOpt.Rule -> "-"

             | "+"

             | Empty ;

 
ValueFilterOpt -> "." "Add"

               | "." "Sub"

               | Empty ;