packages feed

uuagc-0.9.39.0: src-ag/AbstractSyntaxDump.ag

INCLUDE "AbstractSyntax.ag"
INCLUDE "Patterns.ag"
INCLUDE "Expression.ag"

imports
{
import Data.List
import qualified Data.Map as Map

import Pretty
import PPUtil

import AbstractSyntax
import TokenDef
}

ATTR AllPattern AllAbstractSyntax AllExpression [ | | pp USE {>-<} {empty} : PP_Doc ]

SEM Grammar
  | Grammar  		lhs     .  	pp    	=   ppNestInfo ["Grammar","Grammar"] []
                                                       [ ppF "typeSyns" $ ppAssocL @typeSyns
                                                       , ppF "useMap" $ ppMap $ Map.map ppMap $ @useMap
                                                       , ppF "derivings" $ ppMap $ @derivings
                                                       , ppF "wrappers" $ ppShow $ @wrappers
                                                       , ppF "nonts" $ ppVList @nonts.ppL
                                                       ] []

SEM Nonterminal
  | Nonterminal		lhs     .  	pp    	=   ppNestInfo ["Nonterminal","Nonterminal"] (pp @nt : map pp @params) [ppF "inh" $ ppMap @inh, ppF "syn" $ ppMap @syn, ppF "prods" $ ppVList @prods.ppL] []

SEM Production
  | Production		lhs     .  	pp    	=   ppNestInfo ["Production","Production"] [pp @con] [ppF "children" $ ppVList @children.ppL,ppF "rules" $ ppVList @rules.ppL,ppF "typeSigs" $ ppVList @typeSigs.ppL] []

SEM Child
  | Child			lhs     .  	pp    	=   ppNestInfo ["Child","Child"] [pp @name, ppShow @tp] [ppF "inh" $ ppMap @inh, ppF "syn" $ ppMap @syn] []

SEM Rule
  | Rule			lhs     .  	pp    	=   ppNestInfo ["Rule","Rule"] [ppShow @owrt, pp @origin] [ppF "pattern" $ @pattern.pp, ppF "rhs" $ @rhs.pp] []

SEM TypeSig
  | TypeSig			lhs     .  	pp    	=   ppNestInfo ["TypeSig","TypeSig"] [pp @name, ppShow @tp] [] []

SEM Pattern
  | Constr			lhs     .  	pp    	=   ppNestInfo ["Pattern","Constr"] [pp @name] [ppF "pats" $ ppVList @pats.ppL] []
  | Product			lhs     .  	pp    	=   ppNestInfo ["Pattern","Product"] [ppShow @pos] [ppF "pats" $ ppVList @pats.ppL] []
  | Alias			lhs     .  	pp    	=   ppNestInfo ["Pattern","Alias"] [pp @field, pp @attr] [ppF "pat" $ @pat.pp] []
  | Underscore		lhs     .  	pp    	=   ppNestInfo ["Pattern","Underscore"] [ppShow @pos] [] []

SEM Expression
  | Expression		lhs     .  	pp    	=   ppNestInfo ["Expression","Expression"] [ppShow @pos] [ppF "txt" $ vlist . showTokens . tokensToStrings $ @tks] []

ATTR Productions Nonterminals Children Rules TypeSigs Patterns [ | | ppL: {[PP_Doc]} ]

SEM Patterns
  | Cons			lhs		.	ppL		=	@hd.pp : @tl.ppL
  | Nil				lhs		.	ppL		=	[]

SEM TypeSigs
  | Cons			lhs		.	ppL		=	@hd.pp : @tl.ppL
  | Nil				lhs		.	ppL		=	[]

SEM Rules
  | Cons			lhs		.	ppL		=	@hd.pp : @tl.ppL
  | Nil				lhs		.	ppL		=	[]

SEM Children
  | Cons			lhs		.	ppL		=	@hd.pp : @tl.ppL
  | Nil				lhs		.	ppL		=	[]

SEM Productions
  | Cons			lhs		.	ppL		=	@hd.pp : @tl.ppL
  | Nil				lhs		.	ppL		=	[]

SEM Nonterminals
  | Cons			lhs		.	ppL		=	@hd.pp : @tl.ppL
  | Nil				lhs		.	ppL		=	[]