/* ------------------------------------------------------------------------ */
/*                                                                          */
/* [cprj.abs]                  Abstract Grammar                             */
/*                                                                          */
/* ------------------------------------------------------------------------ */

LANGUAGE cprj

TOKENS

  Name, Val

TYPES

  cprj           = Start_ProjectDfn(ProjectDfn)

  ProjectDfn     = root(Project)

  RelOp          = le;
                   eq;
                   ne;
                   gt;
                   ge;
                   lt

  MacDfn         = cond(Name, RelOp, Name, Val, Val);
                   val(Val)

  Project        = dprj(Name, Project);
                   exec(Val, Project);
                   oext(Name, Project);
                   mac(Name, MacDfn, Project);
                   cmd(Name, Val, Project);
                   res(Name, Project);
                   lib(Name, Project);
                   typ(TypDfn, Project);
                   inc(Name, Project);
                   par(Name, Name, Val, Project);
                   ddst(Name, Project);
                   ext(Name, Project);
                   nul;
                   rule(Name, RuleAttr, DstDfn, Project, Name, SrcDfn, Project);
                   dobj(Name, Project)

  RuleAttr       = ex2;
                   nul;
                   exe

  OptTPrefix     = nul;
                   pre(Name)

  OptSPrefix     = pre(Name);
                   nul

  DstDfn         = int(Name, DstName, OptTPrefix, OptSPrefix);
                   ext

  DstName        = nam(Name);
                   root;
                   src;
                   dir

  RegExp         = exp(Val);
                   nul

  SrcAttr        = exp(RegExp);
                   rexp(RegExp)

  SrcDfn         = dfn(Name, SrcAttr)

  TypDfn         = two(Name, Name);
                   one(Name)

