1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
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 "kind" $ ppShow @kind] []
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 = []
|