In this pure text file are collected all the attributes defined in
parallaxis.cg. It serves for better selection on the attributes.

As some nodes have identical attributes, the attribute needs only to
be commented once. Later occurances should refer to this description
by a comment of /* ^ */. This says that this attribute is already
described earlier.

======================================================================

ROOT            = CompUnits .


CompUnits       = 			
-> [Objects1: tObjects]			  /* list of type objects */
-> [Objects2: tVoid]			  /* synchronizing purposes */
-> [Objects3: tObjects]			  /* list of all abjects */
-> [Objects4In: tVoid]			  /* start list (synchronize) */
-> [Objects4Out: tVoid]			  /* receive list (synchronize) */
-> [ImplIdent: tIdent]
-> [ImplTypes: tObjects] 
-> [Env1: tEnv INH]			  /* environment of type objects */
-> [Env2: tVoid INH]			  /* synchronization purposes */
-> [Env3: tEnv INH]			  /* environment of all objects */
-> [PosIn: INDEX]
-> [PosOut: INDEX]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [ConfigGroupIn: INDEX]		  /* config. group number, start at 1 */
<
  NoCompUnit    = .			

  CompUnit      = Next: CompUnits REVERSE 
		  [Kind: INDEX OUT]
		  [Ident: tIdent OUT]	
                  [Pos: tPosition OUT] 	
-> [Object: tObject OUT]		  /* object description in sym-table */
-> [RealName: tIdent OUT]

  <
    DefMod      = 			
		  Imports 		
		  Exports 		
		  Decls 		
		  .
    ImplMod     = 			
		  Imports 		
		  Decls 		
		  Stmts 		
		  [BeginPos: tPosition OUT]
-> [DefObjects1: tObjects]
-> [DefObjects3: tObjects]
-> [GlobalPtrs: tCObjects OUT]
-> [Strings: tStrings OUT]
		  .
  >.
>.



Imports         = 			
-> [Objects1: tObjects]
-> [Objects2: tObjects]
-> [Env1: tEnv INH]
-> [Env2: tEnv INH]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]

<
  NoImport      = .			
  Import        = Next: Imports REVERSE 
  <
    From        = 			
		  [Ident: tIdent OUT] 	
		  [Pos: tPosition OUT] 	
		  ImpIds 
-> [Object1: tObject]
-> [Object2: tObject]
		  .
    Objects     = 			
		  ImpIds
		  .
  >.
>.


ImpIds          =
-> [Objects1: tObjects]
-> [Objects2: tObjects]
-> [Env1: tEnv INH]
-> [Env2: tEnv INH]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds] 			
<
  NoImpId       = .			
  ImpId         = 			
		  Next: ImpIds REVERSE 	
		  [Ident: tIdent OUT]	
                  [Pos: tPosition OUT]  
-> [Type: tType]
-> [Object1: tObject]
-> [Object2: tObject]
-> [IsRedeclared: BOOLEAN]
		  .
>.


Exports         = 
-> [IsQualified: BOOLEAN]			
<
  NoExport      = .			
  Export        = 			
		  [Qualified: BOOLEAN]  
		  ExpIds	
/*
-> [Objects1: tObjects]
-> [Objects2: tObjects]
*/	
		  .
>.


ExpIds          = 
/*
-> [Objects1: tObjects]
-> [Objects2: tObjects]
*/	
<
  NoExpId       = .			
  ExpId         = 			
		  Next: ExpIds REVERSE	
		  [Ident: tIdent OUT]	
                  [Pos: tPosition OUT]
/*
-> [Type: tType]	
*/
		  .
>.


Decls           = 			
-> [Objects1: tObjects]			  /* ^ */
-> [Objects2: tVoid]			  /* ^ */
-> [Objects3: tObjects]			  /* ^ */
-> [Objects4In: tObjects]		  /* list of all objects */
-> [Objects4Out: tObjects]		  /* dito, returned to root */
-> [DefTypes: tObjects]
-> [DefObjects: tObjects]
-> [ImplTypes: tObjects]
-> [Env1: tEnv INH]
-> [Env2: tVoid INH]
-> [Env3: tEnv INH]
-> [Env4: tEnv INH]
-> [PosIn: INDEX]
-> [PosOut: INDEX] 
-> [Kind: INDEX]
-> [Module: tIdent]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents] 
-> [ConnectsIn: tConnects]
-> [ConnectsOut: tConnects] 
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
-> [CntIn: INDEX]
-> [CntOut: INDEX]
-> [Level: INDEX INH]
-> [GlobalPtrs: BOOLEAN]
-> [ConfigGroupIn: INDEX OUT]		  /* preliminary config. group number */
-> [ConfigGroupOut: INDEX]		  /* propagate to next tree branch */
<
  NoDecl        = .			
  Decl          = 			
		  Next: Decls REVERSE   
  <
    Var         =			 
		  VarIds		
		  Type	
-> [IsGlobal: BOOLEAN OUT]		
		  .
    Object      = 			
		  [Ident: tIdent] 	
		  [Pos: tPosition] 
-> [CIdent: tIdent OUT]
-> [IsRedeclared: BOOLEAN]	
    <
      ConnectFrom  =
		  From: Expr		
		  To: Expr 		
		  ConnectDecls 
-> [Object: tObject OUT]		
		  .
      ConnectDecls =			 
		  Index: Expr		
		  [BiDirectional: BOOLEAN]  
		  Config: Qualid	
                  Actuals 		
		  DirIn: ConnectDests 	
-> [Object: tObject OUT]
-> [IndexObjects: tObjects]
-> [LeftConfigObj: tObject]
-> [RightConfigObj: tObject]
-> [IndexVal: tValue OUT]
-> [FirstDeclaration: BOOLEAN OUT]
-> [PrevCIdent: tIdent]
		  .
      Config    = 			
		  Actuals		
		  [Respecified: BOOLEAN] 
		  Qualid		
-> [Object: tObject OUT]
-> [Type: tType]
-> [HasVariableSize: BOOLEAN OUT]
-> [NewConfigGroup: INDEX OUT]		  /* final config. group number */
-> [View: tObject OUT]			  /* path of configs to the basic */
					  /* configuration in the config group */
		  .
      Const     =			
		  Expr			
-> [Object: tObject OUT]
		  .
      TypeDecl  =			 
		  Type			
-> [Object: tObject OUT]
-> [Type1: tType]
-> [Type2: tType]
		  .
      Proc      =
		  Formals		
		  ResultType: Type	
		  Decls			
		  Stmts			
		  [BeginPos: tPosition OUT]
-> [Object: tObject OUT]
-> [Type: tType]
-> [HasOpenVector: BOOLEAN OUT]
/*
-> [HasGenericConfig: BOOLEAN OUT] 
*/
-> [ValueOpens: tCObjects OUT]
-> [VAROpens: tCObjects OUT]
-> [LocalPtrs: tCObjects OUT]
-> [Strings: tStrings OUT]
		  .
      ProcHead  =			
		  Formals		
		  ResultType: Type	
-> [Object: tObject OUT]
-> [Type: tType]
-> [HasOpenVector: BOOLEAN OUT] 
/* 
-> [HasGenericConfig: BOOLEAN OUT] 
*/
		  .
      Opaque    = 			
-> [Object: tObject OUT]
-> [Type1: tType]
-> [FullType: tType]
-> [Type2: tType]
		  .			
    >.
  >.
>.


ConnectDests    = 			
-> [Objects1: tObjects]
-> [Objects2: tVoid]
-> [Objects3: tObjects]
-> [Objects4In: tObjects]
-> [Objects4Out: tObjects]
-> [LeftConfigObj: tObject]
-> [RightConfigObj: tObject]
-> [Env1: tEnv INH]
-> [Env2: tVoid INH]
-> [Env3: tEnv INH]
-> [Env4: tEnv INH]
-> [Kind: INDEX]
-> [Module: tIdent]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [ConnectsIn: tConnects]
-> [ConnectsOut: tConnects]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
-> [Level: INDEX INH]
<
  NoConnectDest = .			
  ConnectDest   =			
		  Next: ConnectDests REVERSE 
		  Expr			
		  Config: Qualid	
		  Actuals 		
  <
    ConnectDestUni= .			
    ConnectDestBi = 			
		  [Ident: tIdent]	
		  [Pos: tPosition OUT]	
		  Index: Expr	
-> [Object: tObject OUT]
-> [IndexVal: tValue OUT]	
-> [CIdent: tIdent OUT]
-> [FirstDeclaration: BOOLEAN OUT]
-> [PrevCIdent: tIdent]
		  .
  >.
>.


VarIds          = 			
-> [Objects3: tObjects]
-> [Type: tType]
-> [TypeTree: ADDRESS]
-> [Kind: INDEX]
-> [Module: tIdent]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
-> [Level: INDEX INH]
<
  NoVarId       = .			
  VarId         = 			
		  Next: VarIds REVERSE	
		  [Ident: tIdent OUT]	
                  [Pos: tPosition OUT]	
-> [Object: tObject OUT]
-> [CIdent: tIdent OUT]
-> [IsRedeclared: BOOLEAN] 
		  .
>.


Formals         = 			
-> [Objects3: tObjects]
-> [Types: tTypes]
-> [HasOpenVector: BOOLEAN OUT]
/*
-> [HasGenericConfig: BOOLEAN OUT]
*/
-> [Env1: tEnv INH]
-> [Env2: tVoid INH]
-> [Env3: tEnv INH]
-> [PosIn: INDEX]
-> [PosOut: INDEX]
-> [Kind: INDEX]
-> [Module: tIdent]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
-> [Level: INDEX INH]
<
  NoFormal      = .			
  Formal        =			
		  Next: Formals REVERSE	
		  [IsVAR: BOOLEAN]	
		  ParIds		
		  Type			
		  .
>.

ParIds          =			 
-> [Objects3: tObjects]
-> [Type: tType]
-> [TypeTree: ADDRESS]
-> [IsVAR: BOOLEAN]
-> [TypesIn: tType]
-> [TypesOut: tTypes]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
-> [Level: INDEX INH]
<
  NoParId       = .			
  ParId         = 			
		  Next: ParIds REVERSE	
		  [Ident: tIdent OUT]	
                  [Pos: tPosition OUT]	
-> [Object: tObject OUT]
-> [CIdent: tIdent OUT]
-> [IsRedeclared: BOOLEAN]
		  .
>.


Type            =			 
-> [Objects3: tObjects]
-> [TypeObj: tObject]
-> [Type1: tType]
-> [Type2: tType OUT]
-> [IsInArray: BOOLEAN]
-> [Env1: tEnv INH]
-> [Env2: tVoid INH]
-> [Env3: tEnv INH]
-> [PosIn: INDEX]
-> [PosOut: INDEX]
-> [Kind: INDEX]
-> [Module: tIdent]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
-> [CntIn: INDEX]
-> [CntOut: INDEX]
-> [HasVariableSize: BOOLEAN OUT]
-> [ContainsVector: BOOLEAN OUT]
<
  Vector        =			
		  [IsOpen: BOOLEAN OUT]	
		  Config: Qualid	
		  Scalar: Type		
-> [Type3: tType OUT]
		  .
  Array         =			
		  [IsOpen: BOOLEAN OUT]	
		  Index: SimpleType	
		  ElemType: Type	
		  .
  Record        =			
		  Fields		
		  .
  SetType       =			
		  BaseType: SimpleType	
		  .
  Pointer       =			
		  TargetType: Type	
-> [TypePos: INDEX OUT]
		  .
  ProcType      =			
		  FormalTypes		
		  ResultType: Type	
		  .
  SimpleType    =
  <
    Enumeration =			
		  EnumIds		
-> [Type0: tType]
		  .
    Subrange    =			
		  BaseType: Type	
		  Lwb: Expr		
		  Upb: Expr		
-> [Type3: tType OUT]
		  .
    PrimaryType =
    <
      Void      = .
      TypeId    =			
		  [Ident: tIdent]	
		  [Pos: tPosition]	
-> [Object: tObject OUT]
      <
        TypeId0 = .			
        TypeId1 = TypeId .		
      >.
    >.
  >.
>.


Fields          = 			
-> [Objects3: tObjects]
-> [FieldsIn: tObjects]
-> [FieldsOut: tObjects]
-> [Env1: tEnv INH]
-> [Env2: tVoid INH]
-> [Env3: tEnv INH]
-> [PosIn: INDEX]
-> [PosOut: INDEX]
-> [Kind: INDEX]
-> [Module: tIdent]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
-> [CntIn: INDEX]
-> [CntOut: INDEX]
-> [nUnion: INDEX]
-> [Select: tSelectors]
-> [ContainsVector: BOOLEAN OUT]
<
  NoField       = .			
  Field         =
		  Next: Fields REVERSE	
  <
    RecordSect  =			
		  FieldIds		
		  Type			
		  .
    VariantSect =
		  TagField		
		  Variants		
		  Else: Fields		
-> [UnionId: tIdent OUT]
-> [ElseId: tIdent OUT]
		  .
  >.
>.

FieldIds        = 			
-> [Type: tType]
-> [FieldsIn: tObjects]
-> [FieldsOut: tObjects]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
-> [Select: tSelectors]
<
  NoFieldId     = .			
  FieldId       =			
		  Next: FieldIds REVERSE 
		  [Ident: tIdent OUT]	
                  [Pos: tPosition OUT]	
-> [Object: tObject OUT]
-> [CIdent: tIdent OUT]
-> [IsRedeclared: BOOLEAN]
		  .
>.

TagField        =			
		  Type: TypeId 		
-> [FieldsIn: tObjects]
-> [FieldsOut: tObjects]
-> [Env1: tEnv INH]
-> [Env2: tVoid INH]
-> [Env3: tEnv INH]
-> [PosIn: INDEX]
-> [PosOut: INDEX]
-> [Kind: INDEX]
-> [Module: tIdent]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
-> [Select: tSelectors]
<
  TagField1     =			
		  .			
  TagField2     = 			
		  [Ident: tIdent]	
-> [Object: tObject OUT]
-> [CIdent: tIdent OUT]
-> [IsRedeclared: BOOLEAN] 
		  .
>.

Variants        = 			
-> [Objects3: tObjects]
-> [FieldsIn: tObjects]
-> [FieldsOut: tObjects]
-> [Env1: tEnv INH]
-> [Env2: tVoid INH]
-> [Env3: tEnv INH]
-> [PosIn: INDEX]
-> [PosOut: INDEX]
-> [Kind: INDEX]
-> [Module: tIdent]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
-> [CntIn: INDEX]
-> [CntOut: INDEX]
-> [nStruct: INDEX]
-> [Select: tSelectors]
<
  NoVariant     = .			
  Variant       =			
		  Next: Variants REVERSE 
		  Labels		
		  Variant: Fields	
-> [StructId: tIdent OUT]
		  .
>.


FormalTypes     =			 
-> [Types: tTypes]
-> [Env1: tEnv INH]
-> [Env2: tVoid INH]
-> [Env3: tEnv INH]
-> [PosIn: INDEX]
-> [PosOut: INDEX]
-> [Kind: INDEX]
-> [Module: tIdent]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
<
  NoFormalType  = .			
  FormalType    =			
		  Next: FormalTypes REVERSE 
		  [IsVAR: BOOLEAN]	
		  Type			
		  .
>.


EnumIds         = 			
-> [Type: tType]
-> [Objects: tObjects]
-> [IndexIn: INDEX]
-> [IndexOut: INDEX]
-> [Kind: INDEX]
-> [Module: tIdent]
-> [IdsIn: tIdents]
-> [IdsOut: tIdents]
-> [LocalIdsIn: tLocalIds]
-> [LocalIdsOut: tLocalIds]
<
  NoEnumId      = .			
  EnumId        =			
		  Next: EnumIds REVERSE	
		  [Ident: tIdent OUT]	
                  [Pos: tPosition OUT]	
-> [Object: tObject OUT]
-> [CIdent: tIdent OUT]
-> [IsRedeclared: BOOLEAN]
		  .
>.



Expr            =			 
-> [Env: tEnv INH]
-> [Type: tType OUT]
-> [Level: INDEX INH]
-> [UseHelpVar: BOOLEAN OUT]		  /* TRUE if expr contains HelpVar */
-> [THelpVar: BOOLEAN OUT]		  /* used to compute TakeHelpVar */
-> [TakeHelpVar: BOOLEAN OUT]		  /* TRUE if expr should be */
					  /* calculated with HelpVar */
-> [HelpVar: tIdent OUT]		  /* name of help variable */
-> [IsFirstDesignator: BOOLEAN OUT]

-> [HasProcOrDimSucc: BOOLEAN]
-> [WriteVectorIndex: BOOLEAN OUT] /* TRUE if after this designator has to */
				   /* follow the index [PE] in the generated */
				   /* c-code */
-> [WriteProcOrDimIndex: BOOLEAN OUT] /* TRUE if after this designator has */
				      /* to follow the index of a processor- */
				      /* or dimension-specification in the */
				      /* generated c-code. (this is at the */
				      /* same position as WritVectorIndex */
				      /* but only one of these two is set */
-> [ProcOrDimSpec: tTree OUT] /* if WriteProcOrDimIndex is TRUE then with */
			      /* this attribute the Expression of the */
			      /* processor or dimension-specification is */
			      /* given */
/* The designator in a designator list who is of vector type and whos   */
/* predecessor ist not of vector type must add [PE] in the code. This   */
/* rule has an exception, when any successor is a Processor <<..>> or a */
/* Dimension <:..:>, because then instead of [PE] (WriteVectorIndex is  */
/* set to TRUE) a concrete [PE-number] (WriteProcOrDimIndex is set to   */
/* TRUE) is added.                                                      */
/* Because it is possible that the PE-number is not directly after the  */
/* first designator of vector type, the Processor respectively the      */
/* Dimensions specification is 'pushed' left so that it reaches the     */
/* the first designator of vector type.                                 */
/* Give attention to the fact that the designator list is organized     */
/* backwards.                                                           */
/* (Juergen:) these attributes are for interest only for sequential c-code!? */

-> [IsCConst: BOOLEAN OUT]          /* TRUE, if expression is constant in C */
				    /* or MPL */
-> [IsP3Const: BOOLEAN OUT]    	    /* TRUE, if expression is constant in */
				    /* Parallaxis-III (more cases than */
				    /* IsCConst, e.g. ** is constant in Pa- */
				    /* rallaxis, but not in C/MPL */
-> [OpenAccessOrCall: BOOLEAN]
-> [GlobalPtrs: BOOLEAN]
-> [StrsIn: tStrings]
-> [StrsOut: tStrings]
<
  NoExpr        = .			
  Multiples     =			
		  Mop: Expr		
-> [MultiType: tType OUT]
  <					
    LastMultiple= .			
    Multiple    =			
		  [Pos: tPosition]	
		  [Operator: INDEX]	
		  Multiples		
-> [COperator: INDEX OUT]
		  .
  >.
  Binary        =			
		  [Pos: tPosition]	
		  [Operator: INDEX]	
		  Lop: Expr		
		  Rop: Expr		
-> [COperator: INDEX OUT]
		  .
  Unary         =			
		  [Pos: tPosition]	
		  [Operator: INDEX]	
		  Mop: Expr		
-> [COperator: INDEX OUT]
		  .
  IntConst      =			
		  [Pos: tPosition OUT]	
		  [Kind: INDEX OUT]	
		  [IntVal: ULONG OUT]	
		  .
  RealConst     =			
		  [Pos: tPosition OUT]	
		  [RealVal: tStringRef OUT] 
		  .
  StringConst   =			
		  [Pos: tPosition OUT]	
		  [StringVal: tStringRef OUT] 
		  .
  CharConst     =			
		  [Pos: tPosition OUT]	
		  [CharVal: UCHAR OUT]	
		  .
  FuncCall      =			
		  Designator		
		  Actuals		
		  .
  Move          =			
		  DirSpec		
		  Expr			
		  .
  Receive       =			
		  DirSpec		
		  Expr			
		  .
  Reduce        =			
		  Reduce: Qualid	/* name of the reduce-function */
		  Expr			/* expression to reduce        */
		  .
  Set           =			
		  BaseType: Qualid	
		  Elems			
		  .
  BitSet        =			
		  Elems			
		  .
  Designator    =
  <
    Qualid      =			
		  [Ident: tIdent]	
		  [Pos: tPosition]	
-> [Object: tObject OUT]
-> [IsGlobalPtr: BOOLEAN OUT]
    <					
      Qualid0   = .			
      Qualid1   =			
		  Qualid		
		  .
    >.
    Processor   =		       /* for example x<<y>> */
		  Designator	       /* next item of designator (x) */
		  [Pos: tPosition OUT]
		  Proc: Expr	       /* processor-spezification (y) */
		  .
    Dimensions  =			
		  Designator		
		  [Pos: tPosition OUT]	
		  Actuals		
		  .
    Select      =			
		  Designator		
		  [Pos: tPosition]	
		  [Field: tIdent]	
-> [Object: tObject OUT]
		  .
    Subscript   =			
		  Designator		
		  [Pos: tPosition OUT]	
		  Index: Expr		
		  .
    Deref       =			
		  Designator		
		  [Pos: tPosition OUT]	
		  .
  >.
>.


DirSpec         =
-> [Env: tEnv INH]
-> [ConnectObj: tObject OUT]
-> [Level: INDEX INH]
-> [OpenAccessOrCall: BOOLEAN]
-> [GlobalPtrs: BOOLEAN]
-> [StrsIn: tStrings]
-> [StrsOut: tStrings]
<
  FuncSpec      = 			
		  DirOut: Qualid	
		  DirOutIndex: Expr	
		  Step: Expr		
		  Reduce: Qualid	
		  .
  ProcSpec      =			
		  Expr			
		  Reduce: Qualid	
		  .
  DimSpec       =			
		  Actuals		
		  Reduce: Qualid	
		  .
>.


Elems           = 			
-> [Env: tEnv INH]
-> [Level: INDEX INH]
-> [UseHelpVar: BOOLEAN OUT]		  /* ^ */
-> [IsCConst: BOOLEAN]			  /* ^ */
-> [IsP3Const: BOOLEAN]			  /* ^ */
-> [OpenAccessOrCall: BOOLEAN]
-> [GlobalPtrs: BOOLEAN]
-> [StrsIn: tStrings]
-> [StrsOut: tStrings]
<
  NoElem        = .			
  Elem          =			
		  Next: Elems REVERSE	
  <
    ElemExpr    =			
		  Elem: Expr		
		  .
    ElemRange   =			
		  Lwb: Expr		
		  Upb: Expr		
		  .
  >.
>.


Actuals         = 			
-> [ReduceNumber: ULONG OUT]
-> [ActualsNumber: ULONG OUT]
-> [Env: tEnv INH]
-> [Types: tTypes]
-> [Formals: tTypes]
-> [Level: INDEX INH]
-> [UseHelpVar: BOOLEAN OUT]		  /* ^ */
-> [IsCConst: BOOLEAN]			  /* ^ */
-> [IsP3Const: BOOLEAN]			  /* ^ */
-> [OpenAccessOrCall: BOOLEAN]
-> [GlobalPtrs: BOOLEAN]
-> [StrsIn: tStrings]
-> [StrsOut: tStrings]
<
  NoActual      = .			
  Actual        =			
		  Next: Actuals REVERSE	
-> [IsVAR: BOOLEAN OUT]
-> [Formal: tType OUT]
  <
    ActualExpr  =			
		  Expr			
-> [HelpVar: tIdent OUT]		  /* name of help variable */
-> [String: tIdent OUT]
		  .
    ActualRange =			
		  Lwb: Expr		
		  Upb: Expr		
		  .
    ActualReduce=			
		  Qualid		
-> [HelpVar: tIdent OUT]		  /* name of help variable */
		  .
    ActualStar  =			
-> [HelpVar: tIdent OUT]		  /* name of help variable */
		  .			
  >.
>.


Stmts           =			
-> [Env: tEnv INH]
-> [Level: INDEX INH]
-> [IsVectorExit: BOOLEAN INH OUT]
-> [ExitConfigsIn: tConfigs]
-> [ExitConfigsOut: tConfigs]
-> [ReturnConfigsIn: tConfigs]
-> [ReturnConfigsOut: tConfigs OUT]
-> [GlobalPtrs: BOOLEAN]
-> [StrsIn: tStrings]
-> [StrsOut: tStrings]
-> [Type: tType]
<
  NoStmt        = .			
  Stmt          =			
		  Next: Stmts REVERSE	
		  [Pos: tPosition]	
  <
    Assign      = 			
		  Designator		
		  Expr			
		  .
    Call        =			
		  Designator		
		  Actuals		
-> [CheckProcs: tType OUT]
-> [AllocOrDealloc: tObject OUT]
		  .
    If          =
		  Cond: Expr		
		  Then: Stmts		
		  Elsifs		
		  Else: Stmts		

		  .
    Case        =			
		  [Default: BOOLEAN OUT] 
		  Expr			
		  Cases			
		  Else: Stmts		
		  .
    While       =			
		  Cond: Expr		
		  Stmts			
		  .
    Repeat      =			
		  Stmts			
		  Cond: Expr		
		  .
    Loop        =			
		  Stmts			
-> [ExitConfigs: tConfigs OUT]
		  .
    Looppar     =			
		  Qualid		
		  Stmts			
-> [ExitConfigs: tConfigs OUT]
		  .
    For         =
		  Qualid		
		  From: Expr		
		  To: Expr		
		  By: Expr		
		  Stmts			
-> [ToVal: tValue OUT] [ByVal: tValue OUT]
		  .
    With        =			
		  Designator		
		  Stmts			
		  .
    All         =			
		  Qualid		
		  Stmts			
		  .
    Send        =		    /* z.B. SEND.left(4*x, y); */	
		  DirSpec	    /* left */
		  From: Expr        /* 4*x  */
		  To: Designator    /* y    */
		  .
    Load        =			
		  [SizeDef: BOOLEAN OUT] 
		  What: Designator	
		  From: Designator	
                  Size: Designator	
		  .
    Store       =			
		  [SizeDef: BOOLEAN OUT] 
		  What: Designator	
		  To: Designator	
                  Size: Designator	
		  .
    Exit        = .			
    Return0     = .			
-> [ResultType: tType OUT]
    Return1     =			
		  Result: Expr		
-> [OpenAccessOrCall: BOOLEAN OUT] 
-> [ResultType: tType OUT]
		  .
  >.
>.


Elsifs          = 			
-> [Env: tEnv INH]
-> [Level: INDEX INH]
-> [IsVectorExit: BOOLEAN INH OUT]
-> [ExitConfigsIn: tConfigs]
-> [ExitConfigsOut: tConfigs]
-> [ReturnConfigsIn: tConfigs]
-> [ReturnConfigsOut: tConfigs OUT]
-> [GlobalPtrs: BOOLEAN]
-> [StrsIn: tStrings]
-> [StrsOut: tStrings]
-> [Type: tType]
<
  NoElsif       = .			
  Elsif         =			
		  Next: Elsifs REVERSE	
		  Cond: Expr		
		  Stmts			
		  .
>.


Cases           =			
-> [Env: tEnv INH]
-> [Level: INDEX INH]
-> [IsVectorExit: BOOLEAN INH OUT]
-> [ExitConfigsIn: tConfigs]
-> [ExitConfigsOut: tConfigs]
-> [ReturnConfigsIn: tConfigs]
-> [ReturnConfigsOut: tConfigs OUT]
-> [GlobalPtrs: BOOLEAN]
-> [StrsIn: tStrings]
-> [StrsOut: tStrings]
-> [Type: tType]
<
  NoCase        = .			
  Cases1        =			
		  Next: Cases REVERSE	
		  Labels		
		  Stmts			
		  .
>.


Labels          = 			
-> [Env: tEnv INH]
<
  NoLabel       = .			
  Label         =			
		  Next: Labels REVERSE	
  <
    LabelExpr   =			
		  Expr			
-> [LabelVal: tValue OUT]
		  .
    LabelRange  =			
		  Lwb: Expr		
		  Upb: Expr		
-> [LwbVal: tValue OUT] [UpbVal: tValue OUT]
		  .
  >.
>.


======================================================================


MODULE Objects  /*------------------------------------------------------*/

CompUnits = ->
    [Objects1: tObjects] [Objects2: tVoid] [Objects3: tObjects]
    [Objects4In: tVoid] [Objects4Out: tVoid] .

ImplMod = ->
    [DefObjects1: tObjects] [DefObjects3: tObjects] .

Decls ConnectDests = ->
    [Objects1: tObjects] [Objects2: tVoid] [Objects3: tObjects]
    [Objects4In: tObjects] [Objects4Out: tObjects] .

VarIds Formals ParIds Type Variants Fields = ->
    [Objects3: tObjects] .

VarIds ParIds = ->
    [Type: tType] [TypeTree: ADDRESS] .

ParIds = ->
    [IsVAR: BOOLEAN] .

CompUnit VarId ParId ConnectFrom ConnectDecls Config Const TypeDecl Proc 
ProcHead Opaque ConnectDestBi = ->
    [Object: tObject OUT] .

ConnectDecls = ->
    [IndexObjects: tObjects] .



MODULE Types    /*------------------------------------------------------*/

Type = ->
    [TypeObj: tObject] [Type1: tType] [Type2: tType OUT] .

Subrange Vector = ->
    [Type3: tType OUT] .
ConnectDecls = ->
    [LeftConfigObj: tObject] [RightConfigObj: tObject] .

ConnectDests = ->
    [LeftConfigObj: tObject] [RightConfigObj: tObject] .

Enumeration = ->
    [Type0: tType] .

Config Proc ProcHead EnumIds FieldIds = ->
    [Type: tType] .

TypeDecl = ->
    [Type1: tType] [Type2: tType] .

Opaque = ->
    [Type1: tType] [FullType: tType] [Type2: tType] .

EnumIds = ->
    [Objects: tObjects] [IndexIn: INDEX] [IndexOut: INDEX] .

EnumId FieldId TagField2 = ->
    [Object: tObject OUT] .

FieldIds TagField Variants Fields = ->
    [FieldsIn: tObjects] [FieldsOut: tObjects].

Formals FormalTypes = ->
    [Types: tTypes] .

ParIds = ->
    [TypesIn: tType] [TypesOut: tTypes] .



MODULE HasOpenVector /*-------------------------------------------------*/

Proc ProcHead Formals = ->
    [HasOpenVector: BOOLEAN OUT] /* [HasGenericConfig: BOOLEAN OUT] */ .



MODULE ReduceNumber /*--------------------------------------------------*/

Actuals = ->
    [ReduceNumber: ULONG OUT] [ActualsNumber: ULONG OUT] .



MODULE IsInArray /*-----------------------------------------------------*/

Type = ->
    [IsInArray: BOOLEAN] .



MODULE ImportExport /*--------------------------------------------------*/

Imports ImpIds /* Export ExpIds */ = ->
    [Objects1: tObjects] [Objects2: tObjects] .
/*
Exports = ->
    [IsQualified: BOOLEAN] .
*/
ImpId /* ExpId */ = ->
    [Type: tType] .



MODULE Redeclarations   /*-----------------------------------------------*/

  CompUnits     = -> [ImplIdent: tIdent] [ImplTypes: tObjects] .

  Decls         = -> [DefTypes: tObjects] [DefObjects: tObjects] [ImplTypes: tObjects] .



MODULE Env      /*------------------------------------------------------*/

Decls ConnectDests = ->
    [Env1: tEnv INH] [Env2: tVoid INH] [Env3: tEnv INH] [Env4: tEnv INH] .

CompUnits Formals Type Fields TagField Variants FormalTypes = ->
    [Env1: tEnv INH] [Env2: tVoid INH] [Env3: tEnv INH] .

Imports ImpIds = ->
    [Env1: tEnv INH] [Env2: tEnv INH] .

Stmts Elsifs Cases Labels Expr Elems Actuals DirSpec = ->
    [Env: tEnv INH] .



MODULE Object   /*------------------------------------------------------*/

From ImpId = ->
  [Object1: tObject] [Object2: tObject] .

TypeId Qualid Select = ->
  [Object: tObject OUT] .

DirSpec = ->
  [ConnectObj: tObject OUT] .



MODULE Type     /*------------------------------------------------------*/

Expr = ->
    [Type: tType OUT] .

Multiples = ->
    [MultiType: tType OUT] .

Actuals = ->
    [Types: tTypes] .



MODULE CheckProcs /*----------------------------------------------------*/

Call = ->
    [CheckProcs: tType OUT] .



MODULE Formals  /*------------------------------------------------------*/

Actuals = ->
    [Formals: tTypes] .

Actual = ->
    [IsVAR: BOOLEAN OUT] [Formal: tType OUT] .



MODULE TypePos          /* -------------------------------------------- */

  CompUnits Decls Formals Type Fields TagField Variants FormalTypes 
                = -> [PosIn: INDEX] [PosOut: INDEX] .

  Pointer       = -> [TypePos: INDEX OUT] .



MODULE Value    /*------------------------------------------------------*/

LabelExpr = ->
    [LabelVal: tValue OUT] .

LabelRange = ->
    [LwbVal: tValue OUT] [UpbVal: tValue OUT] .

For = ->
    [ToVal: tValue OUT] [ByVal: tValue OUT] .

ConnectDecls ConnectDestBi = ->
    [IndexVal: tValue OUT] .



MODULE RealName /*------------------------------------------------------*/

CompUnit = ->
    [RealName: tIdent OUT] .



MODULE Rename           /*----------------------------------------------*/

  VarId ParId EnumId FieldId TagField2 Object ConnectDestBi 
                = -> [CIdent: tIdent OUT] .

  VarIds EnumIds Type Fields Variants TagField FormalTypes Decls Formals 
  ConnectDests 
                = -> [Kind: INDEX] [Module: tIdent] .

  CompUnits VarIds ParIds EnumIds FieldIds Type Fields TagField Variants 
  FormalTypes Decls Formals ConnectDests 
                = -> [IdsIn: tIdents] [IdsOut: tIdents] .

  Decls ConnectDests 
                = -> [ConnectsIn: tConnects] [ConnectsOut: tConnects] .

  ConnectDecls ConnectDestBi 
                = -> [FirstDeclaration: BOOLEAN OUT] [PrevCIdent: tIdent] .

  Imports ImpIds Decls ConnectDests VarIds Formals ParIds Type Fields 
  FieldIds TagField Variants FormalTypes EnumIds 
                = -> [LocalIdsIn: tLocalIds] [LocalIdsOut: tLocalIds] .

  ImpId Object VarId ParId FieldId TagField2 EnumId 
                = -> [IsRedeclared: BOOLEAN] .



MODULE StructIds        /* -------------------------------------------- */

  Decls Type Fields Variants 
                = -> [CntIn: INDEX] [CntOut: INDEX] .



MODULE Selectors        /* -------------------------------------------- */

Fields = ->
    [nUnion: INDEX] .
Variants = ->
    [nStruct: INDEX] .

FieldIds Fields TagField Variants = ->
    [Select: tSelectors] .

VariantSect = ->
    [UnionId: tIdent OUT] [ElseId: tIdent OUT] .
Variant = ->
    [StructId: tIdent OUT] .



MODULE Level            /* -------------------------------------------- */

Var = ->
    [IsGlobal: BOOLEAN OUT] .

VarIds ParIds Expr Elems Actuals Stmts Elsifs Cases Decls Formals 
ConnectDests DirSpec = ->
    [Level: INDEX INH] .



MODULE IsVectorExit /* ------------------------------------------------ */

Stmts Elsifs Cases = ->
    [IsVectorExit: BOOLEAN INH OUT] .



MODULE ExitConfigs /* ------------------------------------------------- */

Stmts Elsifs Cases = ->
    [ExitConfigsIn: tConfigs] [ExitConfigsOut: tConfigs] .

Looppar Loop = ->
    [ExitConfigs: tConfigs OUT] .



MODULE ReturnConfigs /* ----------------------------------------------- */

Stmts Elsifs Cases = ->
    [ReturnConfigsIn: tConfigs] [ReturnConfigsOut: tConfigs OUT] .



MODULE VariableSize     /* -------------------------------------------- */

Config Type = ->
    [HasVariableSize: BOOLEAN OUT] .



MODULE VectorInType     /* -------------------------------------------- */

Type Fields = ->
    [ContainsVector: BOOLEAN OUT] .



MODULE UseHelpVar /* -------------------------------------------------- */

Expr Actuals Elems = ->
    [UseHelpVar: BOOLEAN OUT] [TakeHelpVar: BOOLEAN OUT] .

Expr ActualExpr ActualReduce ActualStar = ->
    [HelpVar: tIdent OUT] .



MODULE IsFirstDesignator /* ------------------------------------------- */

Expr = ->
    [IsFirstDesignator: BOOLEAN OUT] .



MODULE WriteVectorIndex /* -------------------------------------------- */

Expr = ->
    [HasProcOrDimSucc: BOOLEAN] [WriteVectorIndex: BOOLEAN OUT]
    [ProcOrDimSpec: tTree OUT] [WriteProcOrDimIndex: BOOLEAN OUT] .



MODULE COperator        /* -------------------------------------------- */
Multiple Binary Unary  = ->
    [COperator: INDEX OUT] .



MODULE IsCConstExpr     /* -------------------------------------------- */

Elems Actuals = ->
    [IsCConst: BOOLEAN] .

Expr = ->
    [IsCConst: BOOLEAN OUT] .



MODULE OpenAccessOrCall /*----------------------------------------------*/

Expr Elems DirSpec Actuals = ->
    [OpenAccessOrCall: BOOLEAN] .

Return1 = ->
    [OpenAccessOrCall: BOOLEAN OUT] .



MODULE OpenArrays       /* -------------------------------------------- */

Proc = ->
    [ValueOpens: tCObjects OUT] [VAROpens: tCObjects OUT] .



MODULE Pointers         /* -------------------------------------------- */

ImplMod = ->
    [GlobalPtrs: tCObjects OUT] .

Proc = ->
    [LocalPtrs: tCObjects OUT] .

Qualid = ->
    [IsGlobalPtr: BOOLEAN OUT] .

Decls Expr Elems Actuals DirSpec Stmts Elsifs Cases = ->
    [GlobalPtrs: BOOLEAN] .



MODULE StringParams     /* -------------------------------------------- */

ActualExpr = ->
    [String: tIdent OUT] .

ImplMod Proc = ->
    [Strings: tStrings OUT] .

Expr Elems Actuals DirSpec Stmts Elsifs Cases = ->
     [StrsIn: tStrings] [StrsOut: tStrings] .



MODULE FunctionType     /* -------------------------------------------- */

Return0 Return1 = ->
    [ResultType: tType OUT] .

Stmts Cases Elsifs = ->
    [Type: tType] .



MODULE NewOrDispose     /* -------------------------------------------- */

Call = ->
    [AllocOrDealloc: tObject OUT] .

