code: def p_save_code(p):
      
      if p[2].type_ != TYPE.string:
          api.errmsg.syntax_error_expected_string(p.lineno(1), p[2].type_)
  
      if len(p) == 5:
          if p[3].upper() not in ('SCREEN', 'SCREEN$'):
              syntax_error(p.lineno(3), 'Unexpected "%s" ID. Expected "SCREEN$" instead' % p[3])
              return None
          else:
              # ZX Spectrum screen start + length
              # This should be stored in a architecture-dependant file
              start = make_number(16384, lineno=p.lineno(1))
              length = make_number(6912, lineno=p.lineno(1))
      else:
          start = p[4]
          length = p[6]
  
      p[0] = make_sentence(p[1], p[2], start, length)
docs: statement : SAVE expr CODE expr COMMA expr
                     | SAVE expr ID
                     | SAVE expr ARRAY_ID