whole_func_string: function OpenCommand(args, define) {
      var lowerArgs = args.toLowerCase();
      var forIndex = lowerArgs.indexOf(' for ');
      if (forIndex === -1) throw new SyntaxError('OPEN without FOR');
      var filename = new statements.ExpressionStatement(args.substring(0, forIndex).trim(), define);
  
      var asIndex = lowerArgs.indexOf(' as ');
      if (asIndex === -1) throw new SyntaxError('OPEN without AS');
      var type = args.substring(forIndex + 5, asIndex).trim().toLowerCase();
      if (type !== 'input' && type !== 'output' && type !== 'append') throw new SyntaxError('Invalid mode');
  
      var pointer = new statements.ExpressionStatement(args.substring(asIndex + 4).trim(), define);
      if (!(pointer.child instanceof statements.PointerStatement)) throw new SyntaxError('Expected pointer');
  
      this.filename = filename;
      this.type = type;
      this.pointer = pointer;
  }
func_code_string: function OpenCommand(args, define) {
      var lowerArgs = args.toLowerCase();
      var forIndex = lowerArgs.indexOf(' for ');
      if (forIndex === -1) throw new SyntaxError('OPEN without FOR');
      var filename = new statements.ExpressionStatement(args.substring(0, forIndex).trim(), define);
  
      var asIndex = lowerArgs.indexOf(' as ');
      if (asIndex === -1) throw new SyntaxError('OPEN without AS');
      var type = args.substring(forIndex + 5, asIndex).trim().toLowerCase();
      if (type !== 'input' && type !== 'output' && type !== 'append') throw new SyntaxError('Invalid mode');
  
      var pointer = new statements.ExpressionStatement(args.substring(asIndex + 4).trim(), define);
      if (!(pointer.child instanceof statements.PointerStatement)) throw new SyntaxError('Expected pointer');
  
      this.filename = filename;
      this.type = type;
      this.pointer = pointer;
  }
func_documentation_string: Opens a file in a pointer
  
  @param {String} args The arguments to the command
  @param {Function} define
  @constructor