\documentclass[preprint,natbib]{sigplanconf} %include lhs2TeX.fmt %include polycode.fmt \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsthm} \usepackage{stmaryrd} \usepackage{txfonts} \usepackage{float} \usepackage{xcolor} \usepackage{natbib} \usepackage[pdftex]{graphicx} \floatstyle{boxed} \restylefloat{figure} %format ^^^^ = "\hspace{1em}" %format ^^^ = "\;" %format . = "." %format signature = "\mathbf{signature}" %format inputs = "\mathbf{inputs}" %format outputs = "\mathbf{outputs}" %format collation = "\mathbf{collation}" %format sem = "\mathbf{sem}" %format clause = "\mathbf{clause}" %format match = "\mathbf{match}" %format forall = "\mathbf{forall}" %format partial = "\mathbf{partial}" %format << = "\langle" %format >> = "\rangle" \begin{document} % \conferenceinfo{TLDI '10}{January 23, 2010, Madrid.} % \copyrightyear{2010} % \copyrightdata{[to be supplied]} % \titlebanner{banner above paper title} % These are ignored unless \preprintfooter{Attribute Grammar Visit Sequences} % 'preprint' option specified. \title{Attribute Grammars as Visit Sequences} \authorinfo{Arie Middelkoop\and Atze Dijkstra\and S. Doaitse Swierstra} {Universiteit Utrecht} {\{ariem,atze,doaitse\}@@cs.uu.nl} \maketitle % \begin{abstract} % \end{abstract} % \category{F.3.1}{Logics and Meanings of Programs}{Specifying and Verifying and Reasoning about Programs} % \terms{Algorithms, Languages} % \keywords{Type system, type rules, inference algorithm, aspect-oriented programming} \section{Data Types} \subsection{Introduction} \paragraph{Declaration} \begin{code} data Expr | Var nm :: Name | App fun :: Expr arg :: Expr | Lam pat :: Pat body :: Expr \end{code} \paragraph{Pattern Match} \begin{code} @loc::Expr:Var @e::Expr:App \end{code} \section{Signatures} \subsection{Introduction} \paragraph{Inputs and Outputs.} \begin{code} signature TypeExpr1 inputs env :: Env e :: Expr outputs ty :: Type \end{code} \paragraph{Contexts.} \begin{code} signature TypeExpr2 inputs env :: Env e :: Expr Check << inputs ty :: Ty >> Infer << outputs ty :: Ty >> \end{code} \paragraph{Visits.} \begin{code} signature TypePat1 gather << inputs p :: Pat outputs gathEnv :: Env >> analyse << inputs env :: Env ty :: Type >> \end{code} \paragraph{Mixing contexts and visits.} \begin{code} signature TypePat2 gather << inputs p :: Pat outputs gathEnv :: Env >> analyse << inputs env :: Env Check << inputs ty :: Type >> Infer << outputs ty :: Type >> >> \end{code} \paragraph{Totality.} \begin{code} signature TypePat1 gather partial Err << ... >> \end{code} \paragraph{Type parameters.} \begin{code} forall a . signature Eval inputs e :: {Expr a} outputs v :: {a} \end{code} \section{Collations} \subsection{Introduction} \begin{code} collation Inference of TypePat2 gather analyse::Check \end{code} \section{Semantics} \begin{code} typeExpr = << sem :: TypeExpr1 clause match {@loc::Expr:Var} = {@lhs.e} {@lhs.ty} = {findWithDefault undefined @loc.nm @lhs.env} clause match {@loc::Expr:App} = {@lhs.e} child f :: TypeExpr1 = {typeExpr} child a :: TypeExpr1 = {typeExpr} {@f.env} = {@lhs.env} {@f.e} = {@loc.fun} {@a.env} = {@lhs.env} {@a.e} = {@loc.arg} {@lhs.ty} = case @f.ty of Arr a r | a == @a.ty = r _ = error "type error" >> \end{code} %% \bibliographystyle{abbrvnat} \bibliographystyle{plainnat} \bibliography{ruler-aspect} \end{document}