File: cla2for.sci

package info (click to toggle)
scilab 2.6-4
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 54,632 kB
  • ctags: 40,267
  • sloc: ansic: 267,851; fortran: 166,549; sh: 10,005; makefile: 4,119; tcl: 1,070; cpp: 233; csh: 143; asm: 135; perl: 130; java: 39
file content (86 lines) | stat: -rw-r--r-- 2,691 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
function [txt,vnms,vtps,nwrk]=cla2for(clause,vnms,vtps,nwrk)
// traduit une clause (if while for select)
//!
// Copyright INRIA
typ=clause(1)
//write(6,'cla2for '+typ(1))

select typ(1)
case %if then

  ncl=size(clause)
  ncas=(ncl-2)/2
  [t1,t2,ilst,vnms,vtps,nwrk]=exp2for(clause(2),1,vnms,vtps,nwrk)
  t1=t1(1);
  txt=[t2;' '+%if+'('+t1(1)+') '+%then]
  [t1,vnms,vtps,nwrk]=ins2for(clause(3),1,vnms,vtps,nwrk)
  txt=[txt;indentfor(t1)];
  for ic=2:ncas
    [t1,t2,ilst,vnms,vtps,nwrk]=exp2for(clause(2*ic),1,vnms,vtps,nwrk)
    txt=[txt;t2;' '+%elseif+'('+t1(1)(1)+') '+%then];
    [t1,vnms,vtps,nwrk]=ins2for(clause(1+2*ic),1,vnms,vtps,nwrk)
    txt=[txt;indentfor(t1)];
  end;
  [t1,vnms,vtps,nwrk]=ins2for(clause(ncl),1,vnms,vtps,nwrk)
  if t1<>[] then
    txt=[txt;' '+%else;indentfor(t1)];
  end
  txt=[txt;' endif']
case %while then
  [lbl,nwrk]=newlab(nwrk)
  tl1=part(' '+string(10*lbl)'+'   ',1:6)
  [lbl,nwrk]=newlab(nwrk)
  tl2=part(' '+string(10*lbl)'+'   ',1:6)
  [t1,t2,ilst,vnms,vtps,nwrk]=exp2for(clause(2),1,vnms,vtps,nwrk)
  t1=t1(1);
  txt=[t2;tl1+'continue';' '+%if+'(.not.'+t1(1)+') goto '+tl2]
  [t1,vnms,vtps,nwrk]=ins2for(clause(3),1,vnms,vtps,nwrk)
  txt=[txt;t1;'goto '+tl1;tl2+'continue']
case %for then
  name=typ(2)
  if find(name==vnms(:,1))==[] then
    nv=size(vtps)+1
    vnms=[vnms;[name,name]]
    vtps(nv)=list('0','1','1',0)
  end
  forexp=1
  [lbl,nwrk]=newlab(nwrk)
  tl1=part(string(10*lbl)+'   ',1:6);
  [t1,t2,ilst,vnms,vtps,nwrk]=exp2for(clause(2),1,vnms,vtps,nwrk)
  if size(t1(1)(1),2)>1 then
    
    t1=strcat(t1(1)(1),',')
    txt=[t2;' do '+tl1+' '+name+' = '+t1];
  else
    t1=t1(1)
    txt=[t2;' do '+tl1+' i_'+name+' = 0,'+t1(5)+'-1';
	    '    call dcopy('+t1(4)+','+t1(1)+'(1+i_'+name+'*'+t1(4)+'),1,'+name+',1)']   ;
  end
  forexp=0;
  [t1,vnms,vtps,nwrk]=ins2for(clause(3),1,vnms,vtps,nwrk)
  txt=[txt; indentfor(t1);tl1+'continue']
case %select then
  ncas=(size(clause)-3)/2
  [exp1,t1,ilst,vnms,vtps,nwrk]=exp2for(clause(2),1,vnms,vtps,nwrk)
  exp1=exp1(1)
  [exp2,t2,ilst,vnms,vtps,nwrk]=exp2for(clause(3),1,vnms,vtps,nwrk)
  exp2=exp2(1)
  txt=[t1;t2;' '+%if+'('+exp1(1)+'.eq.'+exp2(1)+') '+%then];
  [t1,vnms,vtps,nwrk]=ins2for(clause(4),1,vnms,vtps,nwrk)
  txt=[txt;indentfor(t1)];
  for ic=4:2:2*ncas
    [exp2,t2,ilst,vnms,vtps,nwrk]=exp2for(clause(1+ic),1,vnms,vtps,nwrk)
    exp2=exp2(1)
    txt=[txt;' '+%elseif+'('+exp1(1)+'.eq.'+exp2(1)+' '+%then]
    [t1,vnms,vtps,nwrk]=ins2for(clause(2+ic),1,vnms,vtps,nwrk)
    txt=[txt;indentfor(t1)];
  end;
  [t1,vnms,vtps,nwrk]=ins2for(clause(3+2*ncas),1,vnms,vtps,nwrk)
  if t1<>[] then
    txt=[txt;' '+%else;indentfor(t1)];
  end
  txt=[txt;' endif']
end
//write(6,txt)