code: function instructions(ast, context) {
      var buf='';
      if(!ast) return buf;
      symbols_['$']=context;
      for(var i=0,astlen=ast.length;i<astlen;i++) {
        var node = ast[i];
        //console.log(node);
        if(node && node.length>=3) {
          // assignment 
          if(node[0]=='=') {
            // [ '=', id, val ]
            var id = node[1];
            var v = getValue(node[2]);
            if(id=='_') {
              var tmp=symbols_.hasOwnProperty(id)?symbols_[id]:[];
              tmp.push(v);
              v=tmp;
            } 
            symbols_[id] = v;
          } else if(node[0]=='rem') {
            // just ignore comments
          } else {
            console.log('*** unknown tag **** ' + node[0]);
          }
        }
      }
      delete symbols_['$'];
      return buf;
    }
docs: /*
  Function to handle runtime
  ast - [ array of ops ]
  - each ops
  - EQ (id, value)
  - ITR (op, list, expression)