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 ;
|