assgnd.rig~ 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. #QQQ $S:=u ##
  2. --
  3. -- operatory priswaiwaniq
  4. -- := !.:= !!:= +:= ++:=
  5. --
  6. ---------------------------------------------------
  7. #G_ASSGN
  8. $R:= ASSGN:: <. op: $OP .>
  9. / IF $OP='!!:=' -> #G_ALONGLIST($R)
  10. ELSIF $OP='++:=' -> #G_ALONGTREE($R)
  11. ELSIF T -> #G_ANORM($R) FI/ ##
  12. #G_ANORM
  13. ASSGN:: <. op: ':='
  14. / GEN<< '/* operator := */'/,
  15. lew: ( ( INDEX::<. ARG1:
  16. $A1:= #obxekt_ili_NULL,
  17. ARG2:
  18. $A2:= #INTEGER_ili_obxekt
  19. .>
  20. / $E:= #obqzatelxno_obxekt ($.praw);
  21. GEN<< 'setind(' $A2 $A1 ','
  22. $E ')'/ ) !
  23. ( SELECTOR:: <. ARG1: $A1:=
  24. #obxekt_ili_NULL,
  25. ARG2: $A2:=
  26. #ACONST_ili_obxekt .>
  27. /$E:= #obqzatelxno_obxekt( $.praw);
  28. GEN<< 'setsel(' $A2 $A1 ','
  29. $E ')'/ ) !
  30. ( $E1 / #G_wyravenie( $E1);
  31. $E:= $.praw;
  32. $E:= #obqzatelxno_obxekt( $E);
  33. GEN<< $E1.mesto '.sa=' $E /))
  34. .> ;;
  35. ASSGN:: <. op: '!.:='
  36. /GEN<< '/* operator !.:= */'/,
  37. praw: $E:= #obqzatelxno_obxekt,
  38. lew: ( ( INDEX:: <. ARG1:
  39. $A1:= #obxekt_ili_NULL,
  40. ARG2:
  41. $A2:= #INTEGER_ili_obxekt,
  42. mesto: $W .>
  43. /GEN<<
  44. 'indxop(' $A2 $A1 ',&' $W '.sa);'
  45. 'lconc(&' $W '.sa,' $E ');'
  46. 'setind(' $A2 $A1 ',' $W '.sa)'
  47. / ) !
  48. ( SELECTOR:: <. ARG1: $A1:=
  49. #obxekt_ili_NULL,
  50. ARG2: $A2:=
  51. #ACONST_ili_obxekt,
  52. mesto: $W .>
  53. /GEN<<
  54. 'selop(' $A2 $A1 ',&' $W '.sa);lconc(&'
  55. $W '.sa,' $E ');if(' $W
  56. '.sa==NULL ) setsel(' $A2 $A1 ',NULL)'
  57. / ) !
  58. ( $E1 / #G_wyravenie( $E1);
  59. GEN<< 'lconc(&' $E1.mesto '.sa,'
  60. $E ')'/ ) )
  61. .> ;;
  62. ASSGN:: <. op: '+:='
  63. /GEN<< '/* operator +:= */'/,
  64. praw: $E /#G_wyravenie( $E);
  65. $A3:= #~islo_ili_0( $E)/,
  66. lew: ( ( INDEX:: <. ARG1:
  67. $A1:= #obxekt_ili_NULL,
  68. ARG2:
  69. $A2:= #INTEGER_ili_obxekt,
  70. mesto: $W .>
  71. /GEN<< 'indxop(' $A2 $A1 ',&' $W '.sa);addnum(&'
  72. $W '.sa,' $A3 ');setind(' $A2 $A1 ','
  73. $W '.sa)' / ) !
  74. ( SELECTOR:: <. ARG1:
  75. $A1:= #obxekt_ili_NULL,
  76. ARG2:
  77. $A2:= #ACONST_ili_obxekt,
  78. mesto: $W .>
  79. /GEN<< 'selop(' $A2 $A1 ',&' $W '.sa);addnum(&' $W
  80. '.sa,' $A3 ');setsel(' $A2 $A1 ',' $W
  81. '.sa)' / ) !
  82. ( $E1 / #G_wyravenie( $E1);
  83. GEN<< 'addnum(&' $E1.mesto '.sa,'
  84. $A3 ')' / ) ) .>
  85. ##
  86. ---------------
  87. #G_ALONGLIST
  88. ASSGN:: <. op: '!!:='
  89. /GEN<< '/* operator !!:= */'/,
  90. praw: CONLIST:: <. [ BODY: $B ] .>,
  91. lew: (( INDEX:: <. ARG1:
  92. $A1:= #obxekt_ili_NULL,
  93. ARG2:
  94. $A2:= #INTEGER_ili_obxekt,
  95. mesto: $W .>
  96. /GEN<< 'indxop(' $A2 $A1 ',&'
  97. $W '.sa);'/ ) !
  98. ( SELECTOR:: <. ARG1: $A1:=
  99. #obxekt_ili_NULL,
  100. ARG2: $A2:=
  101. #ACONST_ili_obxekt,
  102. mesto: $W .>
  103. / GEN<< 'selop(' $A2 $A1 ',&' $W '.sa);'/) !
  104. ( $E1 /#G_wyravenie( $E1);
  105. $W := $E1 .mesto / ) ),
  106. -- 2-j prohod
  107. praw: <. [ BODY: (.
  108. $EL:= #obqzatelxno_obxekt
  109. / GEN<< 'lconc(&' $W '.sa,' $EL ');'/
  110. (*
  111. $EL:=#obqzatelxno_obxekt
  112. / GEN<< 'if(' $W '.sa!=NULL ) lconc(&'
  113. $W '.sa,' $EL ');' /
  114. *) .) ] .> ,
  115. lew: (( INDEX:: <. ARG1: $B .>
  116. /GEN<< 'setind(' $A2 $A1 ',' $W '.sa)'
  117. /) !
  118. ( SELECTOR:: <. ARG1: $B .>
  119. /GEN<< 'if(' $W '.sa==NULL )'
  120. 'setsel(' $A2 $A1 ',NULL)'
  121. / ) !
  122. $E1 ) .> ;;
  123. ASSGN:: <. op: '!!:=' ,
  124. praw: $E:= #obqzatelxno_obxekt,
  125. lew: (( INDEX::<. ARG1:
  126. $A1:= #obxekt_ili_NULL,
  127. ARG2:
  128. $A2:= #INTEGER_ili_obxekt,
  129. mesto: $W .>
  130. / GEN<<
  131. 'indxop(' $A2 $A1 ',&' $W '.sa);'
  132. 'concop(&' $W '.sa,' $E ');'
  133. 'if(' $W '.sa==NULL )'
  134. 'setind(' $A2 $A1 ',NULL)'/) !
  135. (SELECTOR:: <. ARG1: $A1:=
  136. #obxekt_ili_NULL,
  137. ARG2: $A2:=
  138. #ACONST_ili_obxekt,
  139. mesto: $W .>
  140. /GEN<<
  141. 'selop(' $A2 $A1 ',&' $W '.sa);'
  142. 'concop(&' $W '.sa,' $E ');'
  143. 'if(' $W '.sa==NULL )'
  144. 'setsel(' $A2 $A1 ',NULL)'/) !
  145. ( $E1 /#G_wyravenie( $E1);
  146. GEN<< 'concop(&' $E1.mesto '.sa,'
  147. $E ')' / ))
  148. .> ##
  149. ---------------
  150. #G_ALONGTREE
  151. ASSGN:: <. op: '++:='
  152. /GEN<< '/* operator ++:= */'/,
  153. praw: CONTREE:: <. [ BODY: $B ],
  154. mesto: $REZ .>,
  155. lew: ( (INDEX:: <. ARG1: $A1:=
  156. #obxekt_ili_NULL,
  157. ARG2: $A2:=
  158. #INTEGER_ili_obxekt,
  159. mesto: $W .>
  160. /GEN<< 'indxop(' $A2 $A1 ',&' $W '.sa);'/ ) !
  161. (SELECTOR:: <. ARG1: $A1 :=
  162. #obxekt_ili_NULL,
  163. ARG2: $A2:=
  164. #ACONST_ili_obxekt,
  165. mesto: $W .>
  166. /GEN<< 'selop(' $A2 $A1 ',&' $W '.sa);'/ ) !
  167. ( $E1 / #G_wyravenie( $E1);
  168. $W := $E1.mesto / ) )
  169. /GEN<< $REZ '=' $W ';'/ ,
  170. -- 2-j prohod
  171. praw: <. [ BODY: (. (*
  172. $EL := #ACONST_ili_obxekt
  173. $EL2 := #obqzatelxno_obxekt
  174. /GEN<< 'addel(' $EL $EL2 ',&' $W '.sa);' /
  175. *) .) ] .> ,
  176. lew: ( ( INDEX:: <. ARG1: $B .>
  177. /GEN<< 'setind(' $A2 $A1 ',' $W '.sa)' / ) !
  178. (SELECTOR:: <. ARG1: $B .>
  179. /GEN<< 'if(' $W '.sa==NULL )'
  180. 'setsel(' $A2 $A1 ',NULL)' / ) !
  181. $E1 ) .> ;;
  182. ASSGN:: <. op: '++:=' ,
  183. praw: $E:= #obqzatelxno_obxekt,
  184. lew: ( (INDEX::<. ARG1: $A1:=
  185. #obxekt_ili_NULL,
  186. ARG2: $A2:=
  187. #INTEGER_ili_obxekt,
  188. mesto: $W .>
  189. /GEN<< 'indxop(' $A2 $A1 ',&' $W '.sa);'
  190. 'addtre(&' $W '.sa,' $E ');'
  191. 'if(' $W '.sa==NULL )'
  192. 'setind(' $A2 $A1 ',NULL)'/ ) !
  193. (SELECTOR:: <. ARG1: $A1:=
  194. #obxekt_ili_NULL,
  195. ARG2: $A2:=
  196. #ACONST_ili_obxekt,
  197. mesto: $W .>
  198. /GEN<< 'selop(' $A2 $A1 ',&' $W '.sa);'
  199. 'addtre(&' $W '.sa,' $E ');'
  200. 'if(' $W '.sa==NULL )'
  201. 'setsel(' $A2 $A1 ',NULL)'/ ) !
  202. ( $E1 /#G_wyravenie( $E1);
  203. GEN<<
  204. 'addtre(&' $E1.mesto '.sa,' $E ')' / )
  205. ) .>
  206. ##
  207. ---------------------------------------------------------
  208. -- wspomogatelxnye prawila
  209. ------------------------------
  210. #obqzatelxno_obxekt
  211. -- wozwra}aet mesto obxekta w wide
  212. -- (. LOC I '.sa' .) ili 'NULL'
  213. -- GLOB I
  214. -- WRK I
  215. --
  216. $E
  217. / #G_wyravenie( $E); $M:= $E.mesto;
  218. IF $E.tip -> #G_ATOM_FROM_REZ ($E);
  219. RETURN (. $E .mesto2 '.sa' .)
  220. ELSIF $M = 'NULL' -> RETURN 'NULL'
  221. ELSIF T -> RETURN (. $M '.sa' .) FI/
  222. ##
  223. -------------------------------------------------------
  224. #obxekt_ili_NULL
  225. -- wozwra}aet mesto obxekta w wide
  226. -- (. LOC I '.sa' .) ili 'NULL'
  227. -- GLOB I
  228. -- WRK I
  229. --
  230. $E
  231. / #G_wyravenie( $E); $M:= $E.mesto;
  232. IF $E.tip OR ($M = 'NULL') -> RETURN 'NULL'
  233. ELSIF T -> RETURN (. $M '.sa' .) FI/
  234. ##
  235. -------------------------------------------------
  236. #INTEGER_ili_obxekt
  237. -- wozwra}aet (. 0L ',TRUE,' WRK I '.sa,' .)
  238. -- ili (. N ',FALSE,NULL,' .)
  239. --
  240. $E
  241. /#G_wyravenie( $E);$M:= $E.mesto; $T:= $E.tip;
  242. IF ($T = ~islo) AND #NUMBER($M) ->
  243. RETURN #IMPLODE( $M 'L,false,NULL,')
  244. ELSIF $T = ~islo ->
  245. RETURN (. $M '.nu,false,NULL,' .)
  246. ELSIF $T OR ($M ='NULL') ->
  247. RETURN '0L,true,NULL,'
  248. ELSIF T -> RETURN (. '0L,true,' $M '.sa,' .)
  249. FI /
  250. ##
  251. ------------------------------------------------
  252. #ACONST_ili_obxekt
  253. -- wozwra}aet (. 'ACNST[' N '],false,NULL,' .)
  254. -- ili (. '0L,true,' WRK I '.sa,' .)
  255. -- LOC I
  256. -- GLOB I
  257. -- '0L,true,NULL,'
  258. --
  259. $E
  260. /#G_wyravenie( $E); $M:= $E.mesto; $T := $E.tip;
  261. $A := $E.ACONST;
  262. IF $A -> RETURN (. 'acnst[' $A '],false,NULL,' .)
  263. ELSIF $T -> #G_ATOM_FROM_REZ( $E);
  264. RETURN (. '0L,true,' $E.mesto2 '.sa,' .)
  265. ELSIF $M = 'NULL' -> RETURN '0L,true,NULL,'
  266. ELSIF T -> RETURN (. '0L,true,' $M '.sa,' .)
  267. FI /
  268. ##
  269. -----------------------------------------------------