Annotation of OpenXM/src/asir-doc/int-parts/inter.texi, Revision 1.1
1.1 ! noro 1: @comment $OpenXM$
! 2: @chapter Interpreter
! 3:
! 4: @section Interpreter $B$N9=@.(B
! 5:
! 6: interpreter $B$O(B, $BCf4V8@8l$N9=@.MWAG$G$"$k(B @code{FNODE} ($B<0(B), @code{SNODE}
! 7: ($BJ8(B) $B$=$l$>$l$N2r<a$r9T$&4X?t72$+$i$J$k(B.
! 8:
! 9: @subsection $B<0$N2r<a<B9T(B
! 10:
! 11: @example
! 12: pointer eval(FNODE f)
! 13: $B<0(B f $B$N2r<a<B9T(B
! 14:
! 15: pointer evalf(FUNC f,FNODE a, FNODE opt)
! 16: $B4X?t(B f $B$N<B9T(B
! 17:
! 18: struct oAFUNC @{ $B;;=Q1i;;%F!<%V%k(B
! 19: void (*add)(); $BOB(B
! 20: void (*sub)(); $B:9(B
! 21: void (*mul)(); $B@Q(B
! 22: void (*div)(); $B>&(B
! 23: void (*pwr)(); $BQQ(B
! 24: void (*chsgn)(); $BId9fH?E>(B
! 25: void (*comp)(); $BHf3S(B
! 26: @};
! 27:
! 28: struct oAFUNC afunc[] = @{
! 29: /* ??? */ @{0,0,0,0,0,0,0@},
! 30: /* O_N */ @{addnum,subnum,mulnum,divnum,pwrnum,chsgnnum,compnum@},
! 31: /* O_P */ @{addp,subp,mulp,divr,pwrp,chsgnp,compp@},
! 32: /* O_R */ @{addr,subr,mulr,divr,pwrr,chsgnr,compr@},
! 33: /* O_LIST */ @{notdef,notdef,notdef,notdef,notdef,notdef,complist@},
! 34: /* O_VECT */ @{addvect,subvect,mulvect,divvect,notdef,chsgnvect,compvect@},
! 35: /* O_MAT */ @{addmat,submat,mulmat,divmat,pwrmat,chsgnmat,compmat@},
! 36: /* O_STR */ @{addstr,notdef,notdef,notdef,notdef,notdef,compstr@},
! 37: /* O_COMP */ @{addcomp,subcomp,mulcomp,divcomp,pwrcomp,chsgncomp,compcomp@},
! 38: /* O_DP */ @{addd,subd,muld,divsdc,notdef,chsgnd,compd@},
! 39: @};
! 40:
! 41: void arf_add(VL vl,Obj a,Obj b,Obj *r)
! 42: *r = a+b
! 43:
! 44: void arf_sub(VL vl,Obj a,Obj b,Obj *r)
! 45: *r = a-b
! 46:
! 47: void arf_mul(VL vl,Obj a,Obj b,Obj *r)
! 48: *r = a*b
! 49:
! 50: void arf_div(VL vl,Obj a,Obj b,Obj *r)
! 51: *r = a/b
! 52:
! 53: void arf_remain(VL vl,Obj a,Obj b,Obj *r)
! 54: *r = a%b
! 55:
! 56: void arf_pwr(VL vl,Obj a,Obj b,Obj *r)
! 57: *r = a^b
! 58:
! 59: void arf_chsgn(Obj a,Obj *r)
! 60: *r = -a
! 61:
! 62: int arf_comp(VL vl,Obj a,Obj b)
! 63: return 1 if a>b; -1 if a<b; 0 if a=b;
! 64: @end example
! 65:
! 66: @code{eval} $B$O(B, $BI,MW$K1~$8$F<+J,<+?H$r8F$S=P$7$J$,$i<0$rI>2A$9$k(B.
! 67: $B;MB'1i;;$K$D$$$F$O;;=Q1i;;%F!<%V%k$KEPO?$5$l$F$$$k4X?t$r(B, Risa object
! 68: $B$N<1JL;R$K=>$C$F8F$S=P$9(B. $B4X?t8F$S=P$7$,$"$C$?>l9g(B, @code{evalf} $B$,(B
! 69: $B8F$S=P$5$l$k(B. $B0z?t$r<0$N%j%9%H$H$7$FI>2A$7$F(B Risa object $B$KJQ49$7$?(B
! 70: $B$"$H(B, $B$=$l$r0z?t$H$7$F<B:]$K4X?t$NCM$NI>2A$r9T$&(B. $B4X?t$,AH$_9~$_$N>l9g(B,
! 71: $BAH$_9~$_4X?t$r8F$S=P$;$P$h$$(B. $B4X?t$,%f!<%6Dj5A4X?t$N>l9g(B, $B6I=jJQ?tG[Ns(B
! 72: $B$N@8@.(B, $B2>0z?t$X$N<B0z?t$NBeF~$N8e(B, $B4X?tDj5AK\BN$NJ8%j%9%H$r(B, $B<!$K=R$Y$k(B
! 73: $BJ8$N2r<a<B9T4X?t$GI>2A$7$F$$$/(B.
! 74:
! 75: @subsection $BJ8$N2r<a<B9T(B
! 76:
! 77: @example
! 78: pointer evalstat(SNODE f)
! 79: $BJ8$N2r<a<B9T(B
! 80: @end example
! 81:
! 82: $BJ8$r2r<a<B9T$9$k>l9g(B, $BJ8Cf$N<0$O(B @code{eval} $B$GI>2A$9$k(B. $B$^$?(B, $BJ8$,J#J8(B
! 83: $B$N>l9g$K$O(B @code{evalstat} $B$r:F5"E*$K8F$S=P$7$FI>2A$9$k(B. @code{evalstat}
! 84: $B$N=EMW$J;E;v$H$7$F(B, @samp{if}, @samp{for} $B$J$I$N@)8fJ8$N2r<a<B9T$,$"$k(B.
! 85: $B$^$?(B, $B<!>O$G=R$Y$k(B debugger $B$H6(D4$7$F(B, $B%V%l!<%/%]%$%s%H>pJs(B,
! 86: $B%9%F%C%W<B9T>pJs$N4IM}$r9T$&(B. $B0J2<$G(B, $B<g$J$b$N$K$D$$$F(B, $B<B:]$K$I$N$h$&$K(B
! 87: $BJ8$,2r<a<B9T$5$l$k$+$r<($9(B.
! 88:
! 89: @subsubsection $BC1J8(B
! 90:
! 91: @example
! 92: case S_SINGLE:
! 93: val = eval((FNODE)FA0(f)); break;
! 94: @end example
! 95:
! 96: $B$3$N>l9g(B, @code{f} $B$N0z?t$O0l$D$N<0$G$"$j(B, @code{eval()} $B$r8F$S=P$9$3$H(B
! 97: $B$G<0$NCM$,7W;;$5$l$k(B.
! 98:
! 99: @subsubsection $BJ#J8(B
! 100:
! 101: @example
! 102: case S_CPLX:
! 103: for ( tn = (NODE)FA0(f); tn; tn = NEXT(tn) ) @{
! 104: if ( BDY(tn) )
! 105: val = evalstat((SNODE)BDY(tn));
! 106: if ( f_break || f_return || f_continue )
! 107: break;
! 108: @}
! 109: break;
! 110: @end example
! 111:
! 112: $B$3$N>l9g(B, @code{f} $B$N0z?t$OJ8%j%9%H$rI=$9(B @code{NODE} $B$G$"$k(B.
! 113: $B$h$C$F(B, $B3F(B @code{NODE} $B$+$i=g$KJ8$r<h$j=P$7$F(B, @code{evalstat()}
! 114: $B$r8F$S=P$9(B. $B3FJ8$r<B9T$7$?$"$H(B, @code{break}, @code{return},
! 115: @code{continue} $B%U%i%0$r%A%'%C%/$7(B, $B$I$l$+$,(B on $B$N>l9g$K$O(B
! 116: $B;D$j$NJ8$r<B9T$7$J$$(B.
! 117:
! 118: @subsubsection If $BJ8(B
! 119:
! 120: @example
! 121: case S_IFELSE:
! 122: if ( evalnode((NODE)FA1(f)) )
! 123: val = evalstat((SNODE)FA2(f));
! 124: else if ( FA3(f) )
! 125: val = evalstat((SNODE)FA3(f));
! 126: break;
! 127: @end example
! 128:
! 129: $BBh(B 0 $B0z?t$O%@%_!<(B, $B>r7o<0%j%9%H$G$"$kBh(B 1 $B0z?t$r(B @code{evalnode()} $B$GI>(B
! 130: $B2A$9$k(B. @code{evalnode()} $B$O%j%9%H$N:G8eHx$N<0$NCM$rJV$9$N$G(B, $B$=$NCM$,Hs(B
! 131: $BNm$N>l9gBh(B 2 $B0z?t$r(B @code{evalstat()} $B$G<B9T(B, $BNm$N>l9g(B, $B$b$7Bh(B 3 $B0z?t$,(B0
! 132: $B$G$J$1$l$P$=$l$r<B9T$9$k(B. @code{else} $B$J$7$N>l9g(B, $BBh(B 3 $B0z?t$O(B 0 $B$G$"$k(B.
! 133:
! 134: @subsubsection For $BJ8(B
! 135:
! 136: @example
! 137: case S_FOR:
! 138: evalnode((NODE)FA1(f));
! 139: while ( 1 ) @{
! 140: if ( !evalnode((NODE)FA2(f)) )
! 141: break;
! 142: val = evalstat((SNODE)FA4(f));
! 143: if ( f_break || f_return )
! 144: break;
! 145: f_continue = 0;
! 146: evalnode((NODE)FA3(f));
! 147: @}
! 148: f_break = 0; break;
! 149: @end example
! 150:
! 151: $BBh(B 0 $B0z?t$O%@%_!<(B, $BBh(B 1 $B0z?t$O=i4|2=$N$?$a$N<0%j%9%H$G$"$k(B. $B$^$:$3$l$r(B
! 152: @code{evalnode()} $B$G<B9T$7$?$"$H(B, $B%k!<%W$r<B9T$9$k(B. $B$^$:(B, $B>r7o<0%j%9%H$G(B
! 153: $B$"$kBh(B 2 $B0z?t$rI>2A$7(B, $B$=$N:G8eHx$N<0$NCM$,Nm$N>l9g(B, $B%k!<%W$rH4$1$k(B. $BHs(B
! 154: $BNm$N>l9g(B, $B%k!<%WK\BN$G$"$kBh(B 4 $B0z?t$r(B @code{evalstat()} $B$G<B9T$9$k(B. $B$3$N(B
! 155: $B<B9T$K$*$$$F(B, break, continue, return $BJ8$,8=$l$?>l9g(B, $B$3$l$i$KBP1~$9$k%U(B
! 156: $B%i%0$,(B on $B$K$J$C$F$$$k(B. C $B8@8l$K$*$1$k5,Dj$K=>$$(B, break, return$B$N>l9g$K(B
! 157: $B$O%k!<%W$rH4$1$k(B. $B$5$i$K(B break $B$N>l9g$K$O(B, $B%k!<%W$r0lCJH4$1$?$3$H$GLrL\(B
! 158: $B$r2L$?$7$F$$$k$?$a(B, $B%U%i%0$r(B off $B$K$9$k(B. continue $B$N>l9g$K$O(B, $BC1$K(B
! 159: continue $B%U%i%0$r(B off $B$K$9$k(B. $B:G8e$K%k!<%W$N:G8e$K<B9T$9$k<0%j%9%H$G$"$k(B
! 160: $BBh(B 3 $B0z?t$r<B9T$7$F%k!<%W$N@hF,$KLa$k(B.
! 161:
! 162: @section $B%f!<%64X?t$N<B9T(B
! 163:
! 164: @example
! 165: pointer evalf(FUNC f, FNODE a, FNODE opt)
! 166: $B4X?t(B f $B$r0z?t(B a, option opt $B$G<B9T(B
! 167: @end example
! 168:
! 169: @code{evalf()} $B$OAH$_9~$_4X?t(B, $B%f!<%64X?t6&$K<B9T$G$-$k(B. @code{evalf()}
! 170: $B$O<0$N2r<a<B9T$N%5%V%k!<%A%s$G$"$k$,(B, $B%f!<%64X?t$N<B9T$O(B, $B<B:]$K$OJ8$N2r(B
! 171: $B<a<B9T$G$"$j(B, $B$^$?(B, $B%W%m%0%i%`JQ?t$NA`:n$r4^$`$d$dJ#;($J<jB3$-$G$"$k(B.
! 172:
! 173: @example
! 174: /* $B%f!<%64X?t$N2r<a<B9T(B */
! 175: case A_USR:
! 176: /* $B0z?t%j%9%H$rI>2A$7$F(B LIST $B%*%V%8%'%/%H$H$9$k(B */
! 177: args = (LIST)eval(a);
! 178: /* $B%m!<%+%kJQ?t(B template */
! 179: pvs = f->f.usrf->pvs;
! 180: if ( PVSS ) @{
! 181: /* $B4{$K4X?tFb$N>l9g(B, $B$=$N4X?tFb$G$N8=4X?t8F$S=P$7$N0LCV$N5-O?(B */
! 182: ((VS)BDY(PVSS))->at = evalstatline;
! 183: level = ((VS)BDY(PVSS))->level+1;
! 184: @} else
! 185: level = 1;
! 186: /* $B%9%?%C%/%U%l!<%`$r@8@.(B, $B%j%9%H$KDI2C(B, $B8=:_$NJQ?tG[Ns$H$9$k(B */
! 187: MKNODE(tn,pvs,PVSS); PVSS = tn;
! 188: CPVS = (VS)ALLOCA(sizeof(struct oVS)); BDY(PVSS) = (pointer)CPVS;
! 189: CPVS->usrf = f; CPVS->n = CPVS->asize = pvs->n;
! 190: CPVS->level = level; CPVS->opt = opts;
! 191: if ( CPVS->n ) @{
! 192: CPVS->va = (struct oPV *)ALLOCA(CPVS->n*sizeof(struct oPV));
! 193: bcopy((char *)pvs->va,(char *)CPVS->va,
! 194: (int)(pvs->n*sizeof(struct oPV)));
! 195: @}
! 196: /* $B%9%F%C%W<B9T$N$?$a$N%l%Y%k$r%"%C%W%G!<%H(B */
! 197: if ( nextbp )
! 198: nextbplevel++;
! 199: /* $B2>0z?t$K<B0z?t$rBeF~(B */
! 200: for ( tn = f->f.usrf->args, sn = BDY(args);
! 201: sn; tn = NEXT(tn), sn = NEXT(sn) )
! 202: ASSPV((int)FA0((FNODE)BDY(tn)),BDY(sn));
! 203: /* $B4X?tK\BN$r<B9T(B */
! 204: val = evalstat((SNODE)BDY(f->f.usrf));
! 205: /* $B%U%i%0(B, $B%9%?%C%/%U%l!<%`$r%j%;%C%H(B */
! 206: f_return = f_break = f_continue = 0; poppvs();
! 207: break;
! 208: @end example
! 209:
! 210: @section $B%G%P%C%,(B
! 211:
! 212: $B%f!<%64X?t$N<B9T$OJ8$rC10L$H$7$F9T$o$l$k$,(B, $BJ8$N<B9TA0$K%G%P%C%0%b!<%I$K(B
! 213: $BF~$k>l9g$,$"$k(B. $B%G%P%C%0%b!<%I$G$O(B, $B0J2<$N$h$&$J5!G=$,Ds6!$5$l$k(B.
! 214:
! 215: @itemize @bullet
! 216: @item $B%V%l!<%/%]%$%s%H$N@_Dj(B
! 217: @item $B%9%F%C%W<B9T(B
! 218: @item $BJQ?t$NCM$N;2>H(B, $BJQ99(B
! 219: @item $B4X?t$N<B9T(B
! 220: @item $B4X?t8F$S=P$7Ns$NI=<((B
! 221: @item $B%=!<%9$N%j%9%F%#%s%0(B
! 222: @end itemize
! 223:
! 224: @subsection $B%G%P%C%0%b!<%I$X$N0\9T(B
! 225:
! 226: $B%G%P%C%0%b!<%I$X$N0\9T$O<!$N$h$&$J>u67$G5/$3$k(B.
! 227:
! 228: @itemize @bullet
! 229: @item @code{debug} $B4X?t$,<B9T$5$l$?>l9g(B.
! 230:
! 231: @item $B%-!<%\!<%I3d$j9~$_$KBP$9$k%a%K%e!<$G(B @samp{d} $B$rA*Br$7$?>l9g(B
! 232:
! 233: @item $B<B9TCf$K%(%i!<$r5/$3$7$?>l9g(B
! 234:
! 235: @item $B%V%l!<%/%]%$%s%H$KC#$7$?>l9g(B
! 236:
! 237: @item $B%G%P%C%0%b!<%I$+$i%9%F%C%W<B9T$,;XDj$5$l$?>l9g(B
! 238:
! 239: $BJ8$N<B9TA0$K%9%F%C%W<B9T%U%i%0$,D4$Y$i$l(B, $B$=$NCM$K$h$j%G%P%C%0%b!<%I$K0\(B
! 240: $B9T$9$k(B.
! 241:
! 242: @item $BAH$_9~$_4X?t(B @code{error()} $B$,<B9T$5$l$?>l9g(B
! 243: @end itemize
! 244:
! 245: @subsection $B%9%F%C%W<B9T(B
! 246:
! 247: $B%G%P%C%,$K$*$1$k%9%F%C%W<B9T%3%^%s%I$K$O(B @code{step} $B$H(B @code{next}
! 248: $B$,$"$k(B. $B$3$l$i$O$$$:$l$b<!$NJ8$r<B9T$7$h$&$H$9$k$,(B, $B<!$N$h$&$J0c$$$,$"$k(B.
! 249:
! 250: @table @code
! 251: @item next
! 252: $B<!$NJ8$,%f!<%64X?t$r4^$s$G$$$F$b(B, $BJ8$4$H<B9T$7(B, $B%G%P%C%0%b!<%I$KLa$k(B.
! 253: @item step
! 254: $B<!$NJ8$,%f!<%64X?t$r4^$s$G$$$?>l9g(B, $B:G=i$KI>2A$5$l$?%f!<%64X?t$N@hF,$G%G%P%C%0%b!<%I$KLa$k(B.
! 255: @end table
! 256:
! 257: $B$3$N5!G=$r<B8=$9$k$?$a$K(B, $BFs$D$NJQ?t$,MQ0U$7$F$"$k(B.
! 258:
! 259: @table @code
! 260: @item nextbp
! 261:
! 262: $B$3$NJQ?t$,(B 0 $B$G$J$$$H$-(B, $B%G%P%C%,$+$i%9%F%C%W<B9T%3%^%s%I$N$b$H$G(B,
! 263: $B%$%s%?%W%j%?$,<B9TCf$G$"$k$3$H$r<($9(B.
! 264:
! 265: @item nextbplevel
! 266:
! 267: $B%9%F%C%W<B9TCf$K%f!<%64X?t<B9T$KF~$k$H$-(B 1 $BA}$((B, $B%f!<%64X?t$+$iH4$1$k$H$-(B
! 268: 1 $B8:$k(B.
! 269: @end table
! 270:
! 271: $B$^$?(B @code{evalstat()} $B$N@hF,$G$O<!$N$h$&$J%3!<%I$,<B9T$5$l$F$$$k(B.
! 272:
! 273: @example
! 274: /* $B%9%F%C%W<B9TCf$G(B nextbplevel $B$,Hs@5(B */
! 275: if ( nextbp && nextbplevel <= 0 && f->id != S_CPLX ) @{
! 276: nextbp = 0;
! 277: /* $B%G%P%C%0%b!<%I$KF~$k(B */
! 278: bp(f);
! 279: @}
! 280: @end example
! 281:
! 282: $B$3$l$i$K$h$j%9%F%C%W<B9T$O<!$N$h$&$K<B8=$5$l$k(B.
! 283:
! 284: @table @code
! 285: @item next
! 286: @code{nextbp = 1}, @code{nextbplevel = 0} $B$H$7$F<B9T$r7QB3$9$k(B.
! 287: $BJ8$N<B9TCf$K4X?t$KF~$k$H(B, @code{nextbplevel} $B$,@5$H$J$k$N$G(B, $BJ8Cf(B
! 288: $B$N4X?t<B9TCf$O%G%P%C%0%b!<%I$KF~$i$J$$(B. $BJ8$N<B9T$,=*$C$F<!$N(B
! 289: $BJ8$N@hF,$KC#$7$?$H$-(B, @code{nextbp = 0}, @code{nextbplevel = 0}
! 290: $B$H$J$C$F$$$k$?$a%G%P%C%0%b!<%I$KF~$k(B.
! 291:
! 292: @item step
! 293: @code{nextbp = 1}, @code{nextbplevel = -1} $B$H$7$F<B9T$r7QB3$9$k(B.
! 294: $BJ8$N<B9TCf$K4X?t$KF~$C$F$b(B, @code{nextbplevel = 0} $B$J$N$G(B
! 295: $B%G%P%C%0%b!<%I$KF~$k(B.
! 296: @end table
! 297:
! 298: @subsection $B%V%l!<%/%]%$%s%H$N@_Dj(B
! 299:
! 300: $B%V%l!<%/%]%$%s%H$N@_Dj$O(B, $BBP>]$H$J$kJ8$NA0$K(B, $B%V%l!<%/%]%$%s%HJ8(B
! 301: ($BJ8<1JL;R(B @code{S_BP} $B$rA^F~$9$k$3$H$G9T$&(B. $B%V%l!<%/%]%$%s%HJ8$O(B
! 302: $B0z?t$H$7$FBP>]$H$J$kJ8(B, $B%V%l!<%/%]%$%s%H$KF~$k$?$a$N>r7o<0$r;}$D(B.
! 303: $B%V%l!<%/%]%$%s%HJ8$,<B9T$5$l$?>l9g(B, $B>r7o$,$J$$$+(B, $B$^$?$O>r7o<0(B
! 304: $B$,??(B (0 $B$G$J$$(B) $B>l9g$K(B @code{nextbp = 1}, @code{nextbplevel = 1}
! 305: $B$H$7$F(B, $B0z?t$G$"$kJ8$r<B9T$9$k(B. $B4{$K=R$Y$?$3$H$h$j(B,
! 306: @code{evalstat()} $B$N@hF,$G%V%l!<%/%]%$%s%H$KF~$k$3$H$K$J$k(B.
! 307:
! 308: @subsection $B%G%P%C%0%b!<%I$K$*$1$kJQ?t$N;2>H(B
! 309:
! 310: $B8=:_<B9TCf$N4X?t$O(B, $B$=$N4X?t9=B$BN$X$N%]%$%s%?(B ($B7?(B @code{FUNC}) $B$,(B
! 311: @code{tagetf} $B$J$kJQ?t$KEPO?$5$l$F$$$k(B. $B8=:_<B9TCf$N4X?t$,%f!<%64X?t$N>l(B
! 312: $B9g(B, $BBP1~$9$k%W%m%0%i%`JQ?t%9%?%C%/$O(B @code{CPVS} $B$KEPO?$5$l$F$$$k(B.
! 313:
! 314: $B%H%C%W%l%Y%k$+$i$=$N4X?t$K;j$k8F$S=P$7Ns$KBP1~$9$k%W%m%0%i%`JQ?t%9%?%C%/(B
! 315: $B%j%9%H$O(B, node $BJQ?t(B @code{PVSS} $B$KEPO?$5$l$F$$$k(B. $B3F%W%m%0%i%`JQ?t%9%?%C%/(B
! 316: $B$O7?(B @code{oVS} $B$G$"$j(B, $B%f!<%64X?t$r<($9%a%s%P(B @code{usrf} $B$r;}$D(B.
! 317:
! 318: $B0J>e$K$h$j(B, $B8=:_<B9TCf$N4X?t$K;j$k8F$S=P$7NsCf$N4X?tL>(B, $B3F4X?t$K$*$1$k(B
! 319: $BJQ?t$NCM$J$I$K%"%/%;%9$9$k$3$H$,$G$-$k(B.
! 320:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>