packages feed

ruler-core-1.0: src/AstAG.ag

DATA Program
  | Program
      blocks : BlocksTop

DATA BlocksTop
  | Top
      blocks : Blocks
  | None

TYPE Blocks = [Block]

DATA Block
  | Itf
      itf : Itf
  | Data
      data : Data
  | Type
      type : Type
  | Section
      code : Code
  | Item
      name : Ident
      item : Item
  | DataSem
      sem  : DataSem

DATA Itf
  | Itf
      pos    : Pos
      name   : Ident
      vars   : Vars
      visits : ItfVisits

TYPE ItfVisits = [ItfVisit]

DATA ItfVisit
  | Visit
      pos    : Pos
      name   : Ident
      cyclic : Bool
      vars   : Vars
      attrs  : Attrs

TYPE Attrs = [Attr]

DATA Attr
  | Inh
      name : Ident
      type : String
  | Syn
      name : Ident
      type : String

DATA Data
  | Data
      pos    : Pos
      name   : Ident
      vars   : Vars
      cons   : Cons
      exts   : Exts

TYPE Vars = [Var]

DATA Var
  | Var
      name   : Ident

TYPE Exts = [Ext]

DATA Ext
  | Ext
      name   : Ident

TYPE Cons = [Con]

DATA Con
  | Con
      pos    : Pos
      name   : Ident
      vars   : Vars
      fields : Fields

TYPE Fields = [Field]

DATA Field
  | Field
      name       : Ident
      type       : FieldType

DATA FieldType
  | Term     type : String
  | Nonterm  name : Ident

DATA Type
  | Alias
      pos    : Pos
      name   : Ident
      type   : AliasType
      vars   : Vars

DATA AliasType
  | Prod   fields : {[Ident]}
  | List   type   : Ident
  | Maybe  type   : Ident

DATA DataSem
  | Sem
      pos     : Pos
      tp      : Ident
      vars    : Vars
      mbMonad : {Maybe String}
      cyclic  : Bool
      stmts   : {Stmts}
      clauses : ClausesTop

TYPE SemCons = [SemCon]

DATA SemCon
  | Con
      pos     : Pos
      name    : Ident
      fields  : SemFields

TYPE SemFields = [SemField]

DATA SemField
  | Field
      pos     : Pos
      name    : Ident
      type    : {Either Ident String}

DATA Code
  | Code
      items : Items

TYPE MaybeBoundCode = MAYBE BoundCode

DATA BoundCode
  | Code
      bind : Bind
      pos  : Pos
      code : Code

TYPE Items = [Item]

DATA Item
  | Plain
      pos      : Pos
      txt      : String
  | Attr
      pos      : Pos
      child    : Ident
      name     : Ident
  | Sem
      pos      : Pos
      name     : Ident
      tp       : Ident
      vars     : Vars
      mbMonad  : {Maybe String}
      first    : SemVisit
  | CoSem
      pos      : Pos
      name     : Ident
      tp       : Ident
      visit    : Ident
      vars     : Vars
      mbMonad  : {Maybe String}
      first    : SemVisit
  | DataSem
      sem      : DataSem
  | Detach  -- requires visits up to but not including this visit to be invoked
      pos      : Pos
      visit    : Ident
      name     : Ident
  | Construct
      pos      : Pos
      data     : Ident
      con      : Ident
      fields   : ExprFields
  | Brackets
      pos      : Pos
      items    : Items
      posEnd   : Pos

TYPE ExprFields = [ExprField]

DATA ExprField
  | Field
      name  : Ident
      code  : Code

DATA SemVisit
  | Visit
      pos      : Pos
      name     : Ident
      cyclic   : Bool
      attrs    : VisitAttrs
      stmts    : Stmts
      clauses  : ClausesTop
  | Internal
      pos      : Pos
      name     : Ident
      cyclic   : Bool
      stmts    : Stmts
      clauses  : ClausesTop
  | Impl
  | Prependable  -- maybe prepended by other visits
      pos      : Pos
      name     : Ident
      actual   : {SemVisit}
  | End

TYPE VisitAttrs = [VisitAttr]

DATA VisitAttr
  | Chn
      name  : Ident
      type  : String

DATA ClausesTop
  | Top
      clauses : Clauses
  | Impl
      clauses : {Clauses}

TYPE Clauses = [Clause]

DATA Clause
  | Clause
      pos     : Pos
      name    : Ident
      stmts   : Stmts
      next    : SemVisit

TYPE Stmts = [Stmt]

DATA Stmt
  | Eval
      mode    : Mode
      pat     : Pat
      code    : BoundCode
  | Attach
      pos     : Pos
      mbVisit : {Maybe Ident}
      name    : Ident
      type    : Ident
      code    : MaybeBoundCode
  | Invoke
      pos     : Pos
      visit   : Ident
      name    : Ident
      code    : MaybeBoundCode
  | Default
      allowEmpty : Bool
      pos        : Pos
      name       : Ident
      mbCode     : MaybeBoundCode
  | Rename
      pos        : Pos
      child      : Ident
      subst      : Renames

TYPE Renames = [Rename]
DATA Rename | Rename
  source : Ident
  dest   : Ident

DATA Mode
  | Match
  | Assert

DATA Bind
  | Fun
  | Monadic

TYPE Pats = [Pat]

DATA Pat
  | Con
      name   : Ident
      pats   : Pats
  | AttrCon
      con    : Ident
      name   : Ident
      dt     : Ident
  | Attr
      child  : Ident
      name   : Ident
  | Tup
      pats   : Pats
  | List
      pats   : Pats
  | Cons
      hd     : Pat
      tl     : Pat
  | Underscore
      pos    : Pos

DATA AttrTypePat
  | VisLocal
  | ProdLocal
  | Lhs
  | Child
  | Visit

DATA AttrTypeCode
  | VisLocal
  | ProdLocal
  | Lhs
  | Child
  | Visit

TYPE ImplStmts = [ImplStmt]

DATA ImplStmt
  | Invoke
      pos        : Pos
      child      : Ident
      visit      : Ident
      itf        : Ident
  | DefaultChild
      pos        : Pos
      allowEmpty : Bool
      child      : Ident
      name       : Ident
      mbCodeRef  : {Maybe Int}
  | DefaultSyn
      pos        : Pos
      allowEmpty : Bool
      name       : Ident
      mbCodeRef  : {Maybe Int}
  | DefaultVisLocal
      pos        : Pos
      name       : Ident