imports { import Patterns import CommonTypes import Data.Map(Map) import Data.Set(Set) } DATA CGrammar | CGrammar typeSyns : {TypeSyns} derivings : {Derivings} wrappers : {Set NontermIdent} nonts : CNonterminals pragmas : {PragmaMap} paramMap : {ParamMap} contextMap: {ContextMap} quantMap : {QuantMap} aroundsMap: {Map NontermIdent (Map ConstructorIdent (Set Identifier))} mergeMap : {Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))} multivisit : {Bool} TYPE CNonterminals = [CNonterminal] DATA CNonterminal | CNonterminal nt : NontermIdent params : {[Identifier]} inh : Attributes syn : Attributes prods : CProductions inter : CInterface DATA CInterface | CInterface seg:CSegments TYPE CSegments = [CSegment] DATA CSegment | CSegment inh : Attributes syn : Attributes TYPE CProductions = [CProduction] DATA CProduction | CProduction con : ConstructorIdent visits : CVisits children : {[(Identifier,Type,ChildKind)]} terminals : {[Identifier]} TYPE CVisits = [CVisit] DATA CVisit | CVisit inh : Attributes syn : Attributes vss : Sequence -- sequence of "steps", where each "step" is either an attribute definition or a child visit intra : Sequence -- how to glue the visits together (child visits are child-intra's, attr-defs are attr-intra's) ordered : Bool -- indicates that vss is ordered TYPE Sequence = [CRule] DATA CRule | CRule name : Identifier isIn : Bool -- True iff there is a definition for an inherited attribute hasCode : Bool -- True iff there is an RHS nt : NontermIdent con : ConstructorIdent field : Identifier childnt : {Maybe NontermIdent} -- Just n: 'field' of 'nt' and 'con' is a nonterminal 'n', Nothing: it is a terminal tp : {Maybe Type} -- type of the attribute pattern : Pattern -- only defined if 'isIn' is False rhs : {[String]} -- empty string if 'hasCode' is False defines : {Map Int (Identifier,Identifier,Maybe Type)} -- the attributes defined by this rule owrt : {Bool} origin : String -- just for documentation (and maybe errors) uses : {Set (Identifier, Identifier)} explicit : Bool -- True if this an explicit rule found in the source file mbNamed : {Maybe Identifier} | CChildVisit name : Identifier -- corresponding to the name of the child nt : NontermIdent nr : Int -- visit number inh : Attributes syn : Attributes isLast : Bool -- indicates whether this is the last visit to this child SET AllCodeSyntax = CGrammar CNonterminal CNonterminals CInterface CSegments CSegment CProduction CProductions CVisits CVisit CRule