Dependencies Grammar Definition


%macro

{exp}                                                                       '(([eE]\-?[0-9]+)?)';

 

%expression Main

'\"'                                                                           %ignore, %push DQuoteString;

''''                                                                             %ignore, %push SQuoteString;

'\"\"'                                                                         emptyString, 'emptyQuotedString';

'/\*'                                                                          %ignore, %push MLCom;

'//'                                                                            %ignore, %push SLCom;

'[ \n\t\r]+'                                                                 %ignore;

'>>'                                                                          DependOp 'DependOp';

'\.'                                                                            Period, 'period';

'\['                                                                            leftBracket, '[';

'\]'                                                                            rightBracket, ']';

'\{'                                                                            leftBrace, '{';

'\}'                                                                            rightBrace, '}';

'\('                                                                            OParen, '(';

'\)'                                                                            CParen, ')';

'[a-zA-Z][a-zA-Z0-9]*'                                            MetaName, 'MetaName';

'[aA][gG][gG][rR][eE][gG][aA][tT][eE][sS]'            aggregateSpecifier, 'Aggregates';

'[dD][eE][tT][aA][iI][lL][sS]'                                  detailSpecifier, 'Details';

','                                                                             Comma, ',';

';'                                                                             SemiColon, ';';

'[aA][nN][dD]'                                                         And, 'and';

'[aA][lL][lL]'                                                           All, 'All';

'[cC][hH][iI][lL][dD][rR][eE][nN]'                          Children, 'Children';

'[sS][uU][bB][sS][eE][tT]'                                        Subset, 'Subset';

 

//------------------------------------------------------------------------

// Multi-line comments (C Style)

//------------------------------------------------------------------------

%expression MLCom

'.'                                                              %ignore;

'\n'                                                            %ignore;

'\*/'                                                           %ignore, %pop;

 

//------------------------------------------------------------------------

// Single line comments (C++ style)

//------------------------------------------------------------------------

%expression SLCom

'.'                                                              %ignore;

'\n'                                                            %ignore, %pop;

 

//---------------------------------------------------------------------------

//   Double quote string handler (For Strings)

//---------------------------------------------------------------------------

%expression DQuoteString

'[^\n"]+'                                                   String, 'string', %goto DQuoteStringEnd;

'\"'                                                           String, %pop;

 

//---------------------------------------------------------------------------

//   Double quote string end handler  (For Strings)

//---------------------------------------------------------------------------

%expression DQuoteStringEnd

'\"'                                                           %ignore, %pop;

 

//---------------------------------------------------------------------------

//   Single quote string handler  (For Symbols)

//---------------------------------------------------------------------------

%expression SQuoteString

'[^\n'']+'                                                   Symbol, 'symbol', %goto SQuoteStringEnd;

''''                                                            Symbol, %pop;

 

//---------------------------------------------------------------------------

//   Single quote string end handler (For Symbols)

//---------------------------------------------------------------------------

%expression SQuoteStringEnd

''''                                                             %ignore, %pop;

 

 

 

//------------------------------------------------------------------------

// Precedence table

//------------------------------------------------------------------------

%prec

1, 'DependOp',   %nonassoc;

2, 'and', %nonassoc;

3, 'period', %left;

 

//------------------------------------------------------------------------

// Grammar

//------------------------------------------------------------------------

%production start

 

Start                                                        start                                                         -> ruleList;

StartNull                                                 start                                                          -> ;

 

RuleListOne                                            ruleList                                                    -> ruleStatement;

RuleListMulti                                          ruleList                                                    -> ruleList ruleStatement;

Rule                                                        ruleStatement                                          -> precedent 'DependOp' dependentList ';';

DependentListOne                                  dependentList                                          -> LHS_expr;

DependentListMulti                                dependentList                                          -> dependentList ',' LHS_expr;

//DependentSimple                                  dependent                                                -> LHS_expr;

LHSCompound                                        LHS_expr                                                -> LHS_expr 'and' LHS_expr;

ExprLHSNull                                           LHS_expr                                                -> '{' '}';

ExprLHSList                                           LHS_expr                                                -> '{' memberList '}';

ExprLHSExpr                                          LHS_expr                                               -> member_set_expr;

ExprLHSAgg                                            LHS_expr                                               -> 'Aggregates';

ExprLHSDet                                            LHS_expr                                               -> 'Details';

ExprLHSAll                                             LHS_expr                                               -> 'All';

MemberLOne                                          memberList                                             -> member_set_expr;

MemberL                                                 memberList                                            -> memberList ',' member_set_expr;

MemberSimple                                         member_expr                                          -> aSymbol;

MemberQualif                                          member_expr                                          -> aSymbol 'period' aSymbol;

MemberString1                                         member_expr                                          -> 'string';

MemberStringString                                  member_expr                                         -> 'string' 'period' 'string';

MemberStringSymbol                               member_expr                                          -> 'string' 'period' aSymbol;

MemberSymbolString                               member_expr                                          -> aSymbol 'period' 'string';

SymSimple                                               aSymbol                                                  -> 'MetaName';

SymQuoted                                              aSymbol                                                   -> 'symbol';

MemberFunc1                                          member_set_expr                                    -> member_expr;

MemberFunc2                                          member_set_expr                                    -> member_expr 'period' member_func;

DimSubset1                                              member_set_expr                                    -> aSymbol 'period' 'Subset' '(' aSymbol ')';

MemFunc1                                              member_func                                          -> 'Children' '(' ')';

PrecedentSimple                                      precedent                                                -> cellSpec;

PrecedentCrossCube                                 precedent                                                -> cubeName 'period' cellSpec;

CubeNameString                                       cubeName                                               -> 'string';

CubeNameSymbol                                    cubeName                                               -> aSymbol;

CellSpec                                                   cellSpec                                                  -> '[' cellMemberList ']';

CellMemberListSimple                             cellMemberList                                      -> member_expr;

CellMemberListMulti                               cellMemberList                                      -> cellMemberList ',' member_expr