anchor.diff:      walker = Walker()
       ast = parser.getAST()
       walker.start(ast)
  +    ast = walker.getAST()
       
       names = walker.instructions.keys()
       names.sort()
  
positive.code:     |! #(LSQUARE etn:NAME eti:rtl_expand)
          {
              if #eti.getType() != NUM:
                  raise SemanticException(#eti, "undefined indice")
              ## = self.astFactory.dup(self.tables[etn.getText()][int(#eti.getText())])
          }
      |! #(RSQUARE lexpr:rtl_expand t:NAME i:rtl_expand rexpr:rtl_expand)
          {
              if #i.getType() != NUM:
                  raise SemanticException(#n, "undefined indice")
              op = self.astFactory.dup(self.tables[t.getText()][int(#i.getText())])
              ## = #(#op, #lexpr, #rexpr)
          }
      |! #(LPAREN f:NAME { args = [] } (arg:rtl_expand { args.append(#arg) } )* )
          {
              if f.getText() in self.functions:
                  params, rtl = self.functions[f.getText()]
                  self.locals.append(dict(zip(params, args)))
                  self.rtl_expand(rtl)
                  ## = self.returnAST
                  self.locals.pop()
              else:
                  ## = #(LPAREN, #f)
                  for _arg in args:
                      ##.addChild(_arg)
          }
  	|! #(r:. {/*print "=>", #r; */## = self.astFactory.dup(#r)} (no:rtl_expand { ##.addChild(#no) } )* )
  	;
  
negative.code:         print "%s(%s) %s" % (name, ','.join(params), body.toStringList())
  }
  
  header "sslPreprocessor.__init__" {
      self.constants = {}
      self.tables = {}
      self.functions = {}
  