*sG      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFNone"G The class G combines two aspects. /Field of an aspect. It associates a production prd with a rule rule. H The class H) is defined by induction over the record vals $ containing the new definitions.  The function I/ inserts each definition into the attribution  of the corresponding child.  The class  ) is defined by induction over the record vals $ containing the new definitions.  The function  / inserts each definition into the attribution  of the corresponding child.  The type  8 states that a rule takes as input the local attributes lf,  the higher-order attributes hof, the synthesized attributes  of the children sc, and the inherited attributes of the parent ip and returns 4 a function from the output constructed thus far  (local attributes l, higher-order attributes ho(, inherited attributes of the children  ic* and synthesized attributes of the parent sp) to the extended output. 6Field of the record of attributions for the children.  A Family  contains a single attribution p for the parent,  l for local attributes, ho for higer-order attributes and  a collection of attributions c for the children. Field of an attribution. An ' does not introduce any new attribute.  The function 2 adds the definition of a higher-order attribute.  It takes a label att. representing the name of the new attribute,  a value valC to be assigned to this attribute, and it builds a function which , updates the output constructed thus far.  The function + adds the definition of a local attribute.  It takes a label att. representing the name of the new attribute,  a value valC to be assigned to this attribute, and it builds a function which , updates the output constructed thus far.  The function 1 adds the definition of a synthesized attribute.  It takes a label att. representing the name of the new attribute,  a value valC to be assigned to this attribute, and it builds a function which , updates the output constructed thus far.  The function 5 modifies the definition of a synthesized attribute.  It takes a label att* representing the name of the attribute,  a value valC to be assigned to this attribute, and it builds a function which , updates the output constructed thus far.  The function + introduces a new inherited attribute for " a collection of non-terminals. & It takes the following parameters:  att(: the attribute which is being defined,  ntsG: the non-terminals with which this attribute is being associated, and  vals=: a record labelled with child names and containing values, M describing how to compute the attribute being defined at each 2 of the applicable child positions. G It builds a function which updates the output constructed thus far.  The function & modifies an inherited attribute for " a collection of non-terminals. & It takes the following parameters:  att(: the attribute which is being defined,  ntsG: the non-terminals with which this attribute is being associated, and  vals=: a record labelled with child names and containing values, M describing how to compute the attribute being defined at each 2 of the applicable child positions. I It builds a function which updates the output constructed thus far.|| Composition of two rules. #Adaption of the childen of a rule. Children renaming. Children mapping. Fixing a constant as a child. +Grafting one tree as a child of the other. A generalized version of * that grafts into or maps every children. !#Child mapping definition, it reads replaced by the constant. "#Child mapping definition, it reads  replaced by. ##Child mapping definition, it reads binds to. &=Composition of children mapping definitions for the function macro. 6 Semantic function of a terminal 7 The function 7. takes the combined rules for a node and the 4 semantic functions of the children, and builds a ? function from the inherited attributes of the parent to its  synthesized attributes. 8A copyI rule copies an inherited attribute from the parent to all its children.  The function 8 takes the name of an attribute att and * an heterogeneous list of non-terminals nts, for which the attribute has to be defined, ' and generates a copy rule for this. 9A useA rule declares a synthesized attribute that collects information  from some of the children.  The function 9> takes the following arguments: the attribute to be defined, A the list of non-terminals for which the attribute is defined, = a monoidal operator which combines the attribute values, = and a unit value to be used in those cases where none of ( the children has such an attribute. :In the chainB rule a value is threaded in a depth-first way through the tree, J being updated every now and then. For this we have chained attributes R (both inherited and synthesized). If a definition for a synthesized attribute T of the parent with this name is missing we look for the right-most child with a O synthesized attribute of this name. If we are missing a definition for one K of the children, we look for the right-most of its left siblings which > can provide such a value, and if we cannot find it there, 8 we look at the inherited attributes of the father. ; The function ;( defines an inherited attribute aspect. 4 It takes as arguments: the name of the attribute att,  the list nts2 of non-terminals where the attribute is defined,  the list cpys8 of productions where the copy rule has to be applied,  and a record  ; containing the explicit definitions for some productions. < The function <* defines a synthesized attribute aspect. ==A chained attribute definition introduces both an inherited [ and a synthesized attribute. In this case the pattern to be applied is the chain rule. JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrG stuvwxyz{|}~HI  !"#$%&'()*+,-./0123456789:;<=      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>  )*+,-.0/12435 !"#&$%'(6789:;<= JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrG stuvwxyz{|}~HI   !"#$%&'()*+,-./0123456789:;<=None,>?@ABCDEF >?@ABCDEF BCFDE>?@A+>?@ABCDEF      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOOPPQQRSTUUVVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%$&$'$()*+,-./0123456789:;<=>?@ABCDEFGHIJIKILIMINIOPQRSRTRUVWVXYZ[\Z[]Z^_Z^`Z^aZ^bZ^cZ^dZ^eZ^fZ^gZ^hZ^iZjkZjlZjmZjnZjoZjpZjqZjrZjsZjtZjuZjvZjwZjxZjyZjzZj{Zj|Zj}Zj~ZjZjZjZjZjZjZjZjZjZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ Z Z Z Z ZZZZZZZZZZZZZZZZZ Z!Z"Z#Z$Z%Z&Z'Z(Z(Z)Z)Z*Z+Z,Z-Z.Z/Z0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z:Z;Z<Z=Z=Z>Z?Z@ZAZBZCZDZDZEZEZFZFZGZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ[Z\Z]Z^Z^Z_Z_Z`ZaZbcZbdZbeZbfZbgZbhZbiZbjZbkZblZbmZbnZboZbpZbqZbrZbsZbtZbuZbvZbwZbxZbyZbzZb{Zb|Zb}Zb~ZbZbZbZbZbZbZbZbZbZbZbZbZbZbZbAspectAG-0.3.6.1Language.Grammars.AspectAG!Language.Grammars.AspectAG.Derive defAspect attAspectListNTch_hdch_tlSemType.+.PrdAtatDefsdefsRuleChiFamAtt emptyRuleinstdeflocdefsyndefsynmodsynupdinhdefinhmodinhupdextadaptrename mapChildrenfixCstgraftagMacro~~>==>-->ignorenoChild<.> withChild withChildAttlhslocdefinstdefMlocdefMinhdefMinhsyndefMsyninhmodMinhupdMsynmodMsynupdMsem_Litknitcopyusechain inhAspect synAspect chnAspectattLabel attLabelschLabelchLabelsderiveAGextendAGaddNTaddProd deriveLangComModsmodsHUpdateAtLabelhUpdateAtLabelHasLabelFnChnFnUseFnCpyPolypoly DefAspectFnInhFnSyn AttAspectChnChi''chnchi''ChnChi'chnchi'ChnChichnchiChain'defchn'ChaindefchnUse'usechi'UseusechiCopy'cpychi'CopycpychiEmptiesemptiesKnkn ComSingle comsingleLocLhsMapRLmapRLMapLRBmapLRBMapLRmapLRRenRLrenRLRenLRrenLR IncorrectUpd SingleUpd singleupdUpdsupds IncorrectMod SingleMod singlemodUndefAtt UndefProdUndefNT IncorrectDef SingleDef singledef hRenameLabel'defcphasLabelsndProxy$fHUpdateAtLabellvRecordRecord$fHasLabellHNilHFalse$fHasLabellHConsb''$fHasLabellRecordb $fPolyFnChnr $fPolyFnUser $fPolyFnCpyr$fDefAspectdeffHConsrules'$fDefAspectdeffHNilRecord$fApplyFnInh(->)(->)$fApplyFnSyn(->)(->)$fAttAspectrdefRecordRecord$fAttAspectrdefRecordrules'-$fChnChi''HTrueHFalseattvalLVPairLVPairLVPair&$fChnChi''HTrueHTrueattvalLVPairichich)$fChnChi''HFalseHFalseattvalschLVPairich'($fChnChi''HFalseHTrueattvalschLVPairich'#$fChnChi'HTrueattvalLVPairLVPairpch$fChnChi'HFalseattvalschichich$fChnChiattntsvalRecordRecordic#$fChnChiattntsvalRecordRecordRecord$$fChain'HTrueattntsvalsclhoicspic'sp&$fChain'HFalseattntsvalsclhoicspic'sp'$fChainattntsvalsclhoicspic'sp'$fUse'HFalseattntsaHCons$fUse'HTrueattntsaHCons$fUseattntsaHCons $fUselntaHNil$fUseattntsaRecord#$fCopy'HTrueHFalseattvpLVPairLVPair$fCopy'HTrueHTrueattvppchpch$fCopy'HFalsemvchattvppchpch$fCopyattntsvpRecordic$fCopyattntsvpRecordRecord$fEmptiesHNilHNil$fEmptiesHConsHCons$fEmptiesRecordRecord$fKnHConsHConsHCons$fKnHNilHNilHNil$fKnRecordRecordRecord$fComSingleHFalsefRecordRecord$fComSingleHTrueLVPairrr'$fComrRecordr'' $fComrRecordr $fAt(->)mv $fAtProxyml $fAtProxympar $fAtProxymv$fMapRLHConsRecordRecord$fMapRLHNilrRecord$fMapRLRecordrr'%$fMapLRBHTrueLVPairRecordRecordRecord&$fMapLRBHFalseLVPairRecordRecordRecord$fMapLRHConsRecordRecord$fMapLRHNilrRecord$fMapLRRecordrr'$fRenRLHConsRecordRecord $fRenRLHNilrr$fRenLRHConsRecordRecord $fRenLRHNilrr#$fSingleUpdHTrueHTrueattLVPairicic'$$fSingleUpdHFalseHTrueProxyLVPairrr'$$fSingleUpdHTrueHFalseProxyLVPairrr'$fUpdsattntsRecordicic''$fUpdsattntsRecordicic#$fSingleModHTrueHTrueattLVPairicic'$$fSingleModHFalseHTrueProxyLVPairrr'$$fSingleModHTrueHFalseProxyLVPairrr'$fModsattntsRecordicic''$fModsattntsRecordicic#$fSingleDefHTrueHTrueattLVPairicic'$$fSingleDefHFalseHTrueProxyLVPairrr'$$fSingleDefHTrueHFalseProxyLVPairrr'$fDefsattntsRecordicic''$fDefsattntsRecordicicbaseGHC.Basefail>>=>>fmapreturnControl.Monad.Fixmfix Control.MonadguardliftMMonadFunctorData.Typeable.InternalTypeable Typeable1 Typeable2 Typeable3 Typeable4 Typeable5 Typeable6 Typeable7MonadFix MonadPlusghc-primGHC.Prim RealWorldtypeOfTyConTypeRep mkTyConAppGHC.STfixSTrunSTmzeromplus=<<sequence sequence_mapMmapM_filterMforMforM_msum>=><=<forevervoidjoin mapAndUnzipMzipWithM zipWithM_foldMfoldM_ replicateM replicateM_whenunlessliftM2liftM3liftM4liftM5apmfilter Data.TypeablecastGHC.IOstToIO GHC.STRefSTRefnewSTRef readSTRef writeSTRef GHC.IORefIORefnewIORef readIORef writeIOReftypeOf7typeOf6typeOf5typeOf4typeOf3typeOf2typeOf1 tyConPackage tyConModule tyConNamemkFunTy splitTyConApp funResultTymkAppTymkTyCon3 typeRepTyCon typeRepArgs tyConString typeOfDefaulttypeOf1DefaulttypeOf2DefaulttypeOf3DefaulttypeOf4DefaulttypeOf5DefaulttypeOf6Default showsTypeRep TypeRepKey typeRepKeymkTyCongcastgcast1gcast2 Data.IORef mkWeakIORef modifyIORef modifyIORef'atomicModifyIORefatomicModifyIORef'atomicWriteIORef Data.FunctionfixControl.Monad.STunsafeInterleaveST unsafeIOToST unsafeSTToIO Data.STRef modifySTRef modifySTRef'ST HList-0.2.3 Data.HListconcrete#Data.HList.GhcSyntax.<++..<..^..@..-..!..=..*.:*::=::+:Data.HList.GhcRecord proxyTcName hFieldTcName recordTcName hConsTcName hNilTcNamenilLub hasNoProxies hUnproxyLabel ProxyFound HasNoProxiesnarrowMNarrowMnarrowM'NarrowM' narrowM'' NarrowM''narrowNarrow lubNarrow LubNarrowNilLubconsLubConsLubhLubHLubequivR RecordEquivequivR' RecordEquiv'Data.HList.GhcExperimentsfunType hDeleteMany HDeleteManyIsTC1IsTC2Data.HList.Variant unVariant mkVariantVarianthMaybiedHMaybiedData.HList.Record hRearrangehTPupdateAtLabel hRenameLabelhProjectByLabels2hProjectByLabelshDeleteAtLabel recordValues recordLabels recordLabels' emptyRecordmkRecord newLVPair labelLVPair valueLVPairLVPairRecord HRLabelSet HRLabelSet' HLabelSet HLabelSet'DuplicatedLabel RecordLabels recordValues' RecordValuesshowComponentsShowComponents showLabel ShowLabelhLookupByLabelHasFieldhLookupByLabel' HasField'h2projectByLabelsH2ProjectByLabelsh2projectByLabels'H2ProjectByLabels' hLeftUnion HLeftUnionhLeftUnionBoolHLeftUnionBoolunionSR UnionSymRecunionSR' UnionSymRec' hRearrange2 HRearrange hRearrange2' HRearrange' ExtraField FieldNotFoundData.HList.TICunTICmkTICTIC HTypeProxiedData.HList.TIPoneTruetuple tipySplit tipyProject tipyUpdate tipyDeleteonTIPhExtend'emptyTIPunTIPmkTIPTIP HTypeIndexedData.HList.HTypeIndexedhSplitByProxieshProjectByProxies hUpdateAtTypehDeleteAtProxy hType2HNathDeleteManyCaseHDeleteManyCase HType2HNatHType2HNatCase hTypes2HNats HTypes2HNatsData.HList.HOccurs hOccursMany HOccursMany hOccursMany1 HOccursMany1 hOccursFst HOccursFsthOccursHOccurs TypeNotFoundhOccurs'HOccurs' hOccursBool HOccursBool hOccursOpt HOccursOpt TypeFound HOccursNothProjectHProjectData.HList.HArrayhSinglehLength hSplitByHNats hLookupByHNat HLookupByHNat hDeleteAtHNat HDeleteAtHNat hUpdateAtHNat HUpdateAtHNathSplitByHNats'HSplitByHNats'hProjectByHNatsHProjectByHNatshProjectAwayByHNatsHProjectAwayByHNatshBetweenHBetweenhDiffHDiff hOrdMember HOrdMemberHLength HMaxLength HMinLength HSingletonData.HList.HZiphUnziphZipHZipData.HList.HListPreludehFlaghRmTaghAddTaghTMemberhMemberhMap'hAppend'append'hMapM_hMapMhBuildhEndappendhConshNilHNilHConsHListhHeadHHeadhTailHTailhExtendHExtendhAppendHAppendhReverseHReverse hReverse' HReverse' naiveHReverse NaiveHReversehBuild'HBuild'applyApplyIdhFoldrHFoldrhMapHMaphMapOutHMapOut ApplyHConsHMap'HShowHSeq hStagedEq' HStagedEq'HNatsHSethFindHFindhFind'HFind'HMemberHMemberM HMemberM'HTMember hTIntersect HTIntersecthTIntersectBoolHTIntersectBool hList2List HList2ListtoHJustToHJust fromHJust FromHJustHAddTagHRmTaghSplitHSplitData.HList.FakePreludesubType typeEqFalse typeEqTrueunProxytoProxyproxyproxyEqtypeEqhLthEqhPredhSucchZerohFalsehTrueHTrueHFalseHBoolhAndHAndhOrHOrhCondHCondHZeroHSuccHNat hNat2Integral HNat2IntegralHNothingHJustHEq hStagedEq HStagedEqHLtTypeEqProxy TypeEqTrue TypeEqFalseSubTypeFail TypeDeclsUserTypeUserD declareLabeldeclareFnLabel chLabels2chNamechTNamentNameprdNameprdTNamesemNamesemPNamederive deriveConsnewNamespataspPaspVattVarchVarchildschildsP deriveListchFun getUserTypegetCtxthdfst'isNT typeNames typeName1mkNamesrecFieldgetCs