%include poly.fmt
%format ^  = " "
%format ^^ = "\;"
%format ATTR = "\mathbf{ATTR}"
%format SEM  = "\mathbf{SEM}"
%format lhs  = "\mathbf{lhs}"
%format .  = "."
%format *  = "\times"
%format (A(n)(f)) = @ n . f
\begin{code}
ATTR Expr Factor   [ ^^ | ^^ | numvars   : Int  ]
ATTR Expr Factor   [ ^^ | ^^ | value     : Int  ]

SEM Expr
  |  Sum       
              lhs   .  value     =  A left value    +  A right value
                    .  numvars   =  A left numvars  +  A right numvars
SEM Factor
  |  Prod      
              lhs   .  value     =  A left value    *  A right value
                    .  numvars   =  A left numvars  +  A right numvars
\end{code}