anchor.diff:  			{ res.append(e) }
           )*
        ;
  +
  +collect_temps returns [res]
  +		{ res = {} }
  +	: do_collect_temps[res]
  +		{ res = res.keys() }
  +	;
  +
  +do_collect_temps[res]
  +	: n:NAME
  +		{
  +            if #n.getText().startswith("tmp"):
  +               res[#n.getText()] = None
  +		}
  +	| #( . ( do_collect_temps[res] )* )
  +	;
  
positive.code: 			{ res.extend(t) }
          )*
        )
  			{ res = self.factory.make("Block(_)", res) }
      ;
  
  rt returns [res]
  
negative.code: 
  specification
  	: #( SEMI ( part )* )
  		{
              sys.stdout.write("insn_table = {\n")
              names = self.instructions.keys()
              names.sort()
              for name in names:
                  params, temps, body = self.instructions[name]
                  sys.stdout.write("\t%r: (%r, %r, %r),\n" % (name, params, temps, str(body)))
              sys.stdout.write("}\n")
  		}
      ;
  
  part
  	: #( INSTR iname:NAME iparams=param_list ibody=r:rtl )
  		{
              tmpnames = self.collect_temps(#r)
              
              
              if self.debug:
                  sys.stderr.write("*** %s(%s;%s) ***\n" % (#iname.getText(), ",".join(iparams), ",".join(tmpnames)))
  
              self.instructions[#iname.getText()] = (iparams, tmpnames, ibody)
              
              if self.debug:
             	    from ir import PrettyPrinter
                  from box import box2text
  
                  kargs = {}
                  for nam in iparams + tmpnames:
                     kargs[nam] = self.factory.make("Sym(_)", nam)
                     
                  term = ibody.make(**kargs)
                  term = self.factory.make("Block(_)", term)
                  
                  printer = PrettyPrinter(self.factory)
                  text = box2text(printer.stmt(term))
                  sys.stderr.write(text)
                  sys.stderr.write("\n\n\n")
  		}
  	| .
  		// ignore
  