// File:     DGEN.SYN
// Copyright Norman Wilde 1993
// AnaGram grammar for a test specification file
//  (partial)

grammar
 -> statement..., eof              =writeDriver();
statement
 -> embeddedBlock, space?...
 -> runStatement, space?...
 -> declaration, space?...
embeddedBlock
 -> block:eb                       =addBlock(eb);
runStatement
  -> runHeader, space..., testSpec
runHeader
  -> "runtest", space..., string:n =setRunName(n);
testSpec
  -> "combining", space...,
     variableList:vl, block:b      =makeComb(vl,b);
(struct STRLIST *) variableList
  -> variable:v, space...          =listNew(v,"");
  -> variableList:lst,
     variable:v, space...          =listAdd(lst,v,"");
declaration
 -> intDeclaration
 -> ItemDeclaration
 -> ClientDeclaration
 -> InvoiceDeclaration
// Declaration of a set of integers
intDeclaration
  -> "int", space...,
      variableList:vl, "{", space?...,
      initializorList:il, "}"
            =addTVars(vl,"int","int",il);
// Declaration of a set of Item objects
ItemDeclaration
 -> "Item", space...,
     variableList:vl, "{", space?...,
     initializorList:il, "}"
            =addTVars(vl,"Item","Item&",il);
// Declaration of a set of Client objects
ClientDeclaration
 -> "Client", space...,
     variableList:vl, "{", space?...,
     initializorList:il, "}"
            =addTVars(vl,"Client","Client&",il);
// Declaration of a set of Invoice objects
InvoiceDeclaration
 -> "Invoice", space...,
     variableList:vl, "{", space?...,
     initializorList:il, "}"
           =addTVars(vl,"Invoice","Invoice&",il);
