DATA Ag | Ag blocks : Blocks TYPE Blocks = [Block] DATA Block | Interface itf : Interface | Code code : Code DATA Interface | Interface pos : Pos name : Ident visits : ItfVisits TYPE ItfVisits = [ItfVisit] DATA ItfVisit | Visit pos : Pos ctx : {[Ident]} name : Ident params : Params -- | Tail -- pos : Pos -- name : Ident -- mbVisit : {Maybe Ident} TYPE Params = [Param] DATA Param | Param name : Ident type : Code isInput : Bool DATA Sem | Sem pos : Pos type : Ident mbVisit : {Maybe Ident} prods : Prods TYPE Prods = [Prod] DATA Prod | Prod pos : Pos visits : ProdVisits TYPE ProdVisits = [ProdVisit] DATA ProdVisit | Visit pos : Pos isStatic : Bool name : Ident clauses : Clauses TYPE Clauses = [Clause] DATA Clause | Internal pos : Pos stmts : Stmts | External pos : Pos code : Code TYPE Stmts = [Stmt] DATA Stmt | ChildSem pos : Pos name : Ident type : Ident mbVisit : {Maybe Ident} code : Code | VisitSem pos : Pos name : Ident visit : Ident code : Code | Match pos : Pos pat : Code expr : Code | Eval pos : Pos pat : Code expr : Code DATA Code | Code pos : Pos tokens : Tks TYPE Tks = [Tk] DATA Tk | String pos : Pos str : String | Ident pos : Pos child : Ident name : Ident | Visit pos : Pos child : Ident name : Ident | Sem posBegin : Pos sem : Sem posEnd : Pos