⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makematlabcallstring.m

📁 student teacher and proferssor llove this project,this a very important exmple
💻 M
字号:
function tempstr1=makeMATLABcallstring(howmany,subscripts,centercomma,parens,i,j);declare_globals%%%if zzz%%%'33333333333333333333333'%%% howmany,subscripts,centercomma,parens,kb%%%endtempstr1=''; %defaultfor k=1:howmany is_real=0; is_complex=0; is_integer=1; is_logical=0; is_1d=0; is_2d=0; scalar=1; is_2d_r=0; is_2d_c=0; if howmany==1  if isinf(j)%    try   start=parens(1);            finish=parens(2);%    start,finish,funstr{i},   funstr{i}(start:finish)%    catch%     kb% end   %howmany,subscripts,centercomma,parens   [outflag,howmany3,subscripts3,centercomma3,parens]=inwhichlast(i,parens(1));   %97   %start,finish,funstr{i},   funstr{i}(start:finish),'22222222222',%kb  else   start=parens(1);           finish=parens(2);  end  nums=find((funstrnumbers_b{i}>=start)&(funstrnumbers_b{i}<=finish));  words=find((funstrwords_b{i}>=start)&(funstrwords_b{i}<=finish)); else  if k==1   start=parens(1);          finish=centercomma(1);  elseif k==howmany   start=centercomma(k-1);   finish=parens(2);  else   start=centercomma(k-1);   finish=centercomma(k);  end  nums=find((funstrnumbers_b{i}>=start)&(funstrnumbers_b{i}<=finish));  words=find((funstrwords_b{i}>=start)&(funstrwords_b{i}<=finish)); end%%%  if zzz%%%   '1111111111111111',funstr{i}(start:finish),funstrnumbers{i},nums,words,kb%%%  end for m=1:length(words) %Should be a main level (or in bracket in main level) word to check it  [outflag,howmany3,subscripts3,centercomma3,parens3]=inwhichlast(i,funstrwords_b{i}(words(m)));  if ~isempty(parens3)%%%   parens4=[0 0];%%%   if outflag==1 %In bracket, test bracket for level%%%    [outflag,howmany4,subscripts4,centercomma4,parens4]=inwhichlast(i,parens3(1));%%%   end   %'whhhhhhhh',parens,parens3,parens4,kb   if parens3(1)==parens(1)% | parens4(1)==parens(1)    if length(find(strcmpi(funstrwords{i}(words(m)),inoutother3)))>0 %Have a variable     if length(find(strcmpi(funstrwords{i}(words(m)),inoutother{3})))>0 %Have a local variable      temp1=find(strcmpi(funstrwords{i}(words(m)),inoutother{3}));      %'1111111111111111',funstr{i},funstrwords{i}(words(m)),kb      if strcmpi(localvartype{temp1},'real')       is_real=1; %Now we are indexed to the real numbers.      elseif strcmpi(localvartype{temp1},'complex')       is_complex=1;      elseif strcmpi(localvartype{temp1},'logical')       is_logical=1;      end     else      if isreal(getfield(cw,funstrwords{i}{words(m)}))       is_real=1; %Now we are indexed to the real numbers.      else       is_complex=1;      end     end     [howmany2,subscripts2,centercomma2,parens2]=hassubscript(i,words(m));     %What dim of var do we have?     if howmany2==0 %No subscript? either 2d or scalar      if prod(size(getfield(cw,funstrwords{i}{words(m)})))>1       if     size(getfield(cw,funstrwords{i}{words(m)}),1)==1, is_2d_r=1;       elseif size(getfield(cw,funstrwords{i}{words(m)}),2)==1, is_2d_c=1;       else                                                     is_2d=1;       end      end     elseif howmany2>0 %Run through subscripts, if have anything but scalar, result is 2d      if ~is_2d       typestr=makeMATLABcallstring(howmany2,subscripts2,centercomma2,parens2,i,words(m));       if howmany2==1        if any(strcmpi(typestr(1),typs{12})) %non scalar         if     size(getfield(cw,funstrwords{i}{words(m)}),1)==1          if any(strcmpi(typestr(1),typs{1})) %If a array indexes a row, result is matrix           is_2d=1;          else                               %Otherwise result is row           is_2d_r=1;          end         elseif size(getfield(cw,funstrwords{i}{words(m)}),2)==1          if any(strcmpi(typestr(1),typs{1})) %If a array indexes a column, result is matrix           is_2d=1;          else                               %Otherwise result is col           is_2d_c=1;          end         else %Have a 2-D var with 1 subscript, must be find or some, so result is same as subscr          if     any(strcmpi(typestr(1),typs{1})) %array indexed by array, result is array           is_2d=1;          elseif any(strcmpi(typestr(1),typs{9}))|any(strcmpi(typestr(1),typs{4}))           is_2d_r=1;          elseif any(strcmpi(typestr(1),typs{10}))%array indexed by col, result is col           is_2d_c=1;          end         end        end       elseif howmany2==2        if any(strcmpi(typestr(1),typs{12}))&any(strcmpi(typestr(2),typs{12})) %both non scalar         if     size(getfield(cw,funstrwords{i}{words(m)}),1)==1, is_2d_r=1;         elseif size(getfield(cw,funstrwords{i}{words(m)}),2)==1, is_2d_c=1;         else %Have a 2-D array indexed by 2 vectors, result is array          nums1=find((funstrnumbers_b{i}>=parens2(1))&(funstrnumbers_b{i}<=centercomma2(1)));          words1=find((funstrwords_b{i}>=parens2(1))&(funstrwords_b{i}<=centercomma2(1)));          nums2=find((funstrnumbers_b{i}>=centercomma2(1))&(funstrnumbers_b{i}<=parens2(2)));          words2=find((funstrwords_b{i}>=centercomma2(1))&(funstrwords_b{i}<=parens2(2)));          %          if zzz          %           'herererere',kb          %          end          if (length(nums1)+length(words1))==1 %1st subscript is 1 val vector, so result is row           is_2d_r=1;          elseif (length(nums2)+length(words2))==1 %2nd sub is 1 val vector, result col           is_2d_c=1;          else %both are multivalued vectors           is_2d=1;          end         end        elseif any(strcmpi(typestr(1),typs{12})) %Only 1st sub is nonscalar, 2nd is scalar         is_2d_c=1; %Because this will be vectorized at some point (?? should we)        elseif any(strcmpi(typestr(2),typs{12})) %Only 2nd sub is nonscalar, 1st is scalar         is_2d_r=1; %Because this will be vectorized at some point (?? should we)        else %Do nothing, is scalar result        end       end      end     end    elseif length(find(strcmpi(funstrwords{i}(words(m)),'pi')))>0     is_real=1;    elseif length(find(strcmpi(funstrwords{i}(words(m)),'end')))>0    elseif length(find(strcmpi(funstrwords{i}(words(m)),{'i' 'j' 'cmplx'})))>0     is_real=0;is_complex=1;    elseif length(find(strcmpi(funstrwords{i}(words(m)),make_words)))>0 %make_variable     [howmany2,subscripts2,centercomma2,parens2]=hassubscript(i,words(m));     typestr=makeMATLABcallstring(howmany2,subscripts2,centercomma2,parens2,i,words(m));     eval(['[temp1,temp2,temp5]=',funstrwords{i}{words(m)}(1:end-1),'_make(''',typestr,''');']);     if any(strcmpi(temp5{2},typs{6})), is_real=1;   end     if any(strcmpi(temp5{2},typs{3})), is_complex=1;end     if any(strcmpi(temp5{2},typs{8})), is_logical=1;end     if any(strcmpi(temp5{2},typs{1})), is_2d=1;     end     if any(strcmpi(temp5{2},typs{4})), is_1d=1;     end     if any(strcmpi(temp5{2},typs{9})), is_2d_r=1;   end     if any(strcmpi(temp5{2},typs{10})),is_2d_c=1;   end    elseif length(find(strcmpi(funstrwords{i}(words(m)),make_words2)))>0      %make_variable no f but not intrinsic     [howmany2,subscripts2,centercomma2,parens2]=hassubscript(i,words(m));     typestr=makeMATLABcallstring(howmany2,subscripts2,centercomma2,parens2,i,words(m));     eval(['[temp1,temp2,temp5]=',funstrwords{i}{words(m)},'_make(''',typestr,''');']);     if any(strcmpi(temp5{2},typs{6})), is_real=1;   end     if any(strcmpi(temp5{2},typs{3})), is_complex=1;end     if any(strcmpi(temp5{2},typs{8})), is_logical=1;end     if any(strcmpi(temp5{2},typs{1})), is_2d=1;     end     if any(strcmpi(temp5{2},typs{4})), is_1d=1;     end     if any(strcmpi(temp5{2},typs{9})), is_2d_r=1;   end     if any(strcmpi(temp5{2},typs{10})),is_2d_c=1;   end    elseif any(strcmpi(funstrwords{i}(words(m)),filename_all))          %subroutine name     is_2d=1;    elseif any(strcmpi(funstrwords{i}(words(m)),intrinsics))     %Intrinsics means all words taken care of in functionresultsize.m     if ~(is_complex&is_2d)      tempstr=functionresultsize(i,words(m));      if any(strcmpi(typs{6},tempstr)), is_real=1;   end      if any(strcmpi(typs{3},tempstr)), is_complex=1;end      if any(strcmpi(typs{8},tempstr)), is_logical=1;end      if any(strcmpi(typs{1},tempstr)), is_2d=1;     end      if any(strcmpi(typs{4},tempstr)), is_1d=1;     end           if any(strcmpi(typs{9},tempstr)), is_2d_r=1;   end      if any(strcmpi(typs{10},tempstr)),is_2d_c=1;   end          end%%%      if strcmpi(funstrwords{i}{words(m)},'sum')%%%       'intrins',funstr{i},funstrwords{i}{words(m)}%%%       is_real%%%       is_complex%%%       is_integer%%%       is_logical%%%       is_1d%%%       is_2d%%%       is_2d_r%%%       is_2d_c%%%       scalar%%%       tempstr%%%       kb%%%      end    elseif strncmp('mxT',funstrwords{i}(words(m)),3)     if length(funstrwords{i}{words(m)})>3      if strcmpi(funstrwords{i}{words(m)}(1:4),'mxTR')       is_real=1;       is_2d=1;      end      if strcmpi(funstrwords{i}{words(m)}(1:4),'mxTC')       is_complex=1;    is_2d=1;      end      if strcmpi(funstrwords{i}{words(m)}(1:4),'mxTI')                        is_2d=1;      end     end    else     is_real=1; is_2d=1; %scalar=0; %default if something else is there (eg another mlcall)    end      end  end%%%      if strcmpi(funstrwords{i}{words(m)},'sum')%%%       'intrins',funstr{i},funstrwords{i}{words(m)}%%%       m%%%       is_real%%%       is_complex%%%       is_integer%%%       is_logical%%%       is_1d%%%       is_2d%%%       is_2d_r%%%       is_2d_c%%%       scalar%%%       kb%%%      end end  if ~(is_1d|is_2d)  temp=findstr(funstr{i},'['); %Promote to vector if has a [] expr.  temp1=findrights(temp,funstr{i});  if ~isempty(temp)   temp=temp( (temp>=start)&(temp<=finish) );   if ~isempty(temp)    for m=1:length(temp)     [outflag,howmany3,subscripts3,centercomma3,parens3]=inwhichlast(i,temp(m)+1);          if ~isempty(parens3)      if parens3(1)==parens(1)       %funstr{i}(temp(m)+1:temp1(m)-1)       tempstr2=makeMATLABcallstring(1,{funstr{i}(temp(m)+1:temp1(m)-1)},[],[temp(m)+1 temp1(m)-1],i,inf);       if any(strcmpi(tempstr2,typs{6})), is_real=1;   end       if any(strcmpi(tempstr2,typs{3})), is_complex=1;end       if any(strcmpi(tempstr2,typs{8})), is_logical=1;end%%%       'reeeeeeeeeeeeeeeee2',funstr{i},outflag,howmany3,subscripts3,centercomma3,parens3,%%%       is_real%%%       is_complex%%%       is_integer%%%       kb       is_1d=1; break      else       [outflag,howmany3,subscripts3,centercomma3,parens3]=inwhichlast(i,temp(m)); %279       if ~isempty(parens3)        if parens3(1)==parens(1)         %funstr{i}(temp(m)+1:temp1(m)-1)         tempstr2=makeMATLABcallstring(1,{funstr{i}(temp(m)+1:temp1(m)-1)},[],[temp(m)+1 temp1(m)-1],i,inf);         if any(strcmpi(tempstr2,typs{6})), is_real=1;   end         if any(strcmpi(tempstr2,typs{3})), is_complex=1;end         if any(strcmpi(tempstr2,typs{8})), is_logical=1;end%%%         'reeeeeeeeeeeeeeeee',funstr{i},outflag,howmany3,subscripts3,centercomma3,parens3%%%         is_real%%%         is_complex%%%         is_integer%%%         kb         is_1d=1; break        end       end      end     end    end%%%    'bracketmake',funstr{i}(start:finish),funstr{i},%%%    is_real%%%    is_complex%%%    is_integer%%%    is_logical%%%    is_1d%%%    is_2d%%%    is_2d_r%%%    is_2d_c%%%    scalar%%%    kb   end  end  temp=findstr(funstr{i},':'); %Promote to vector if has a : expr.  if ~isempty(temp)   temp=temp( (temp>=start)&(temp<=finish) );   if ~isempty(temp)    for m=1:length(temp)     [outflag,howmany3,subscripts3,centercomma3,parens3]=inwhichlast(i,temp(m)); %35               if ~isempty(parens3)      if parens3(1)==parens(1)       is_1d=1; break      end     end    end   end  end end%%%        if any(strcmpi('prod',funstrwords{i}))%%%        'wqordggggggggg',funstr{i},funstrwords{i}{j},%%%        is_real%%%        is_complex%%%        is_integer%%%        is_logical%%%        is_1d%%%        is_2d%%%        is_2d_r%%%        is_2d_c%%%        scalar%%%        kb%%%       end if ~(is_real|is_complex)  %fid=0;parens3=[1 1];  for m=1:length(nums) % Promote to real if has a real number at main level   if m>1    %funstr{i},funstr{i}(start:finish),funstr{i},kb    if ~(funstrnumbers_b{i}(nums(m))>parens3(1) & funstrnumbers_b{i}(nums(m))<parens3(2) & ~any(funstr{i}(funstrnumbers_b{i}(nums(m-1)):funstrnumbers_b{i}(nums(m)))=='['))     [outflag,howmany3,subscripts3,centercomma3,parens3]=inwhichlast(i,funstrnumbers_b{i}(nums(m)));    end   else    [outflag,howmany3,subscripts3,centercomma3,parens3]=inwhichlast(i,funstrnumbers_b{i}(nums(m)));   end   if ~isempty(parens3)%%%   if parens(1)~=1 % Don't have a main level entity    if outflag==1 % In bracket     [outflag,howmany4,subscripts4,centercomma4,parens4]=inwhichlast(i,parens3(1));    else     parens4=parens3;    end%%%   end    if parens3(1)==parens(1) | parens4(1)==parens(1)     %funstr{i},funstr{i}(start:finish),funstr{i},kb     if length(intersect([typs{17}{:}],funstrnumbers{i}{nums(m)}))>0      is_real=1; break     end    end   end  end end%%%        if any(strcmpi('prod',funstrwords{i}))%%%         'wqordggggggggg22222',funstr{i},funstrwords{i}{j},%%%         is_real%%%         is_complex%%%         is_integer%%%         is_logical%%%         is_1d%%%         is_2d%%%         is_2d_r%%%         is_2d_c%%%         scalar%%%         kb%%%        end         %Now decide what this is... if is_2d_r|is_2d_c, is_2d=1; end if is_2d, is_1d=1; scalar=1; end if is_1d,          scalar=1; end if is_integer  tempstr1(k)=barr{3,end+1-scalar-is_1d-is_2d}; end if is_real  tempstr1(k)=barr{2,end+1-scalar-is_1d-is_2d}; end if is_complex  tempstr1(k)=barr{1,end+1-scalar-is_1d-is_2d}; end %Now a test to see of this is a logical statement for n=1:length(loglist)  if ~isempty(subscripts{k})   temp3=findstrexact(loglist{n},subscripts{k});   if ~isempty(temp3)    temp4=findstrexact(subscripts{k},funstr{i});    for p=1:length(temp3)     [outflag,howmany3,subscripts3,centercomma3,parens3]=inwhichlast(i,temp4+temp3(p)-1);     if ~isempty(parens3)      if parens(1)==parens3(1) %parens we are in match parens that relop is in       is_logical=1;      end     end    end   end  end end if is_logical  tempstr1(k)=barr{4,end+1-scalar-is_1d-is_2d}; end if is_2d  [a(k),b(k)]=find(strcmpi(tempstr1(k),barr));  if is_2d_r, tempstr1(k)=barr2{a(k),1}; end  if is_2d_c, tempstr1(k)=barr2{a(k),2}; end endend%%%if zzz%%% '11111111111111111'%%% if ~isempty(parens)%%%  is_real%%%  is_complex%%%  is_integer%%%  is_logical%%%  is_1d%%%  is_2d%%%  is_2d_r%%%  is_2d_c%%%  scalar%%%  funstr{i}(parens(1):parens(2))%%% end%%% howmany,subscripts,centercomma,parens%%% funstr{i},%%% tempstr1%%% kb%%%end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -