rig_crf.rig 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. -- postroenie tablicy perekrestnyh ssylok
  2. -- dlq RIGAL -programm
  3. -- riga wc lgu 16.03.88
  4. --------------------------------------------------
  5. -- Changed 6-dec-1989 : added #TATOM, better list output.
  6. -- added numbers
  7. #C
  8. -- whod: XXXXX.S1
  9. -- wyhod: XXXXX.CRF
  10. --
  11. -- globalxnye peremennye
  12. -- $TAB <* imq_prawila : <* imq_peremennoj :
  13. -- nomer_peremennoj *>
  14. -- *>
  15. --
  16. -- $CALLS <* prawilo-hozqin :
  17. -- <* prawilo-sluga : t *> *>
  18. -- $CALLED <* prawilo-sluga :
  19. -- <* prawilo-hozqin : t *> *>
  20. -- $USE_LAST <* prawilo-potrebitelx :
  21. -- <* prawilo-hozqin :
  22. -- <* peremennaq : t *>
  23. -- *> *>
  24. -- $USED_LAST <* prawilo-hozqin :
  25. -- <* peremennaq :
  26. -- <* prawilo-potrebitelx *>
  27. -- *> *>
  28. -- $RLIST <* prawilo: T *>
  29. -- spisok prawil , ime`}ih opredeleniq
  30. -- $NUMS <* prawilo : $NUMBER *>
  31. -- spisok nomerow prawil, ime`}ih opredeleniq i LAST-ssylki
  32. --------------------------------------------------
  33. $L:=#PARM(T);
  34. $L:= $L[1];
  35. $M:=#CALL_PAS(14 #IMPLODE($L '.rig'));
  36. OPEN LST #IMPLODE( $L '.crf' );
  37. OPEN CRT #IMPLODE( $L '.crt' );
  38. OPEN ERR ' ';
  39. LST <<@ 'START OF CROSS REFERENCE FOR ' $L '.RIG';
  40. LST <<'-------------------------------------------------------';
  41. CRT <<@ 'START OF CROSS REFERENCE FOR ' $L '.RIG';
  42. ERR <<@ 'START OF CROSS REFERENCE FOR ' $L '.RIG';
  43. ERR <<@ 'LU RIGA / JAN 1990 / IBM/PC VERSION ';
  44. #programma ( $M );
  45. FORALL $R IN $NUMS DO
  46. $X:=$CALLS.$R;
  47. IF $X -> CRT<<@ 'R' $NUMS.$R '--->';
  48. FORALL $V IN $X DO
  49. IF $NUMS.$V-> CRT<]@ ' R' $NUMS.$V FI OD FI OD;
  50. CRT << '******************************';
  51. FORALL $R IN $NUMS DO
  52. $X:=$CALLED.$R;
  53. IF $X -> CRT<<@ 'R' $NUMS.$R '<----';
  54. FORALL $V IN $X DO
  55. IF $NUMS.$V-> CRT<]@ ' R' $NUMS.$V FI OD FI OD;
  56. FORALL $R IN $TAB DO
  57. LST<< @ '[' $NUMS.$R '] RULE #' $R;
  58. IF $RLIST .$R =NULL ->
  59. LST<] ' ***UNDEFINED***' FI;
  60. $X:= $CALLS .$R;
  61. IF $X -> LST<< ' CALLS RULES:';
  62. FORALL $V IN $X DO
  63. LST<] ' ' @ ' #' $V ;
  64. IF $NUMS.$V -> LST<] @ '[' $NUMS.$V ']' FI
  65. OD
  66. FI;
  67. $X:= $CALLED .$R;
  68. IF $X -> LST<<' CALLED BY RULES:';
  69. FORALL $V IN $X DO
  70. LST<] ' ' @ ' #' $V '[' $NUMS.$V ']' OD
  71. FI;
  72. $X:= $TAB .$R;
  73. IF $X -> LST<< @ ' VARIABLES( ' #LEN( $X) '):';
  74. FORALL $V IN $X DO
  75. LST<] ' ' @ ' $' $V OD
  76. FI;
  77. $X:= $USED_LAST .$R;
  78. IF $X -> LST<< @ ' GLOBAL VARIABLES( '
  79. #LEN( $X) '):';
  80. FORALL $V IN $X DO
  81. $Y:= $X .$V;
  82. FORALL $W IN $Y DO
  83. LST<< @ ' $' $V ' USED BY #' $W '[' $NUMS.$W ']'
  84. OD
  85. OD
  86. FI;
  87. $X:= $USE_LAST .$R;
  88. IF $X -> LST<< ' USES GLOBAL VARIABLES:';
  89. FORALL $V IN $X DO
  90. $Y:= $X .$V;
  91. FORALL $W IN $Y DO
  92. LST<< @ ' LAST #' $V '[' $NUMS.$V '] $' $W
  93. OD
  94. OD
  95. FI ;
  96. LST<<'------------------------------------------------'
  97. OD;
  98. ERR <<@ 'O.K. CROSS REFERENCE READY IN ' $L '.CRF & .CRT' ;
  99. ERR <<;
  100. ##
  101. ----------------------------------------------------
  102. #USE_LAST
  103. $pra $per
  104. /$tp:= LAST #programma $tek_prawilo;
  105. $A:= LAST #C $USE_LAST . $tp;
  106. $B:= $A . $pra;
  107. $C:= $B . $per;
  108. IF $A= NULL -> LAST #C $USE_LAST ++:= <. $tp:
  109. <. $pra: <. $per: T .> .> .>
  110. ELSIF $B = NULL -> $A ++:= <. $pra: <. $per: T .>
  111. .>
  112. ELSIF $C = NULL -> $B ++:= <. $per: T .> FI;
  113. $A:= LAST #C $USED_LAST . $pra;
  114. $B := $A .$per;
  115. $C := $B . $tp;
  116. IF $A = NULL -> LAST #C $USED_LAST ++:= <. $pra:
  117. <. $per: <. $tp: T .> .> .>
  118. ELSIF $B = NULL -> $A ++:= <. $per: <. $tp: T .>
  119. .>
  120. ELSIF $C = NULL -> $B ++:= <. $tp: T .> FI /
  121. ##
  122. --------------------------------------------------------
  123. #CALL
  124. $CLD
  125. / $CLS:= LAST #programma $tek_prawilo;
  126. $A:= LAST #C $CALLS . $CLS;
  127. $B:= LAST #C $CALLED . $CLD;
  128. IF $A -> $A ++:= <. $CLD: T .>
  129. ELSIF T -> LAST #C $CALLS ++:= <. $CLS:
  130. <. $CLD: T .> .>
  131. FI;
  132. IF $B -> $B ++:= <. $CLS: T .>
  133. ELSIF T -> LAST #C $CALLED ++:= <. $CLD:
  134. <. $CLS: T .> .> FI /
  135. ##
  136. --------------------------------------------------
  137. #TAB
  138. -- zanesenie w $TAB
  139. $imq_prawila $imq_peremennoj
  140. /$T := LAST #C $TAB. $imq_prawila;
  141. $NOM := $T.$imq_peremennoj;
  142. IF $T = NULL -> LAST #C $TAB ++:=
  143. <. $imq_prawila : <. '_':0,
  144. $imq_peremennoj : 1 .> .>
  145. ELSIF $NOM = NULL -> $T ++:=
  146. <. $imq_peremennoj : #LEN($T) .> FI/ ;;
  147. $imq_prawila
  148. / $T := LAST #C $TAB.$imq_prawila;
  149. IF $T = NULL -> LAST #C $TAB ++:=
  150. <. $imq_prawila : <. '_' : 0 .> .> FI/
  151. ##
  152. ----------------------------------------------------
  153. -- analiz RIGAL- programmy
  154. -- i postroenie tablic
  155. ---------------------------------------------
  156. #programma
  157. -- globalxn. peremennye
  158. -- $tek_prawilo = imq tek.prawila dlq dostupa w $TAB
  159. ----------------------------------------------------
  160. (. (*
  161. $tek_prawilo := #_RULETOATM
  162. / #NUM ( $tek_prawilo );
  163. #TAB ( $tek_prawilo );
  164. $I+:=1;ERR<< $I @
  165. '**prawilo #' $tek_prawilo;
  166. LAST #C $RLIST ++:=
  167. <. $tek_prawilo: T.>/
  168. (* ( ( $ID:= #_VARNTOATM
  169. / #TAB( $tek_prawilo $ID)/) !
  170. ( $ID:= #_RULETOATM
  171. / #CALL( $ID)/ ) !
  172. ( V'($$ = 'LAST')
  173. #_KEYWORD
  174. $ID:= #_RULETOATM
  175. $E:= #_VARNTOATM
  176. /#NUM($ID); #TAB( $ID $E );
  177. #USE_LAST( $ID $E )/ ) !
  178. ( V'($$ ='##')
  179. #_KEYWORD
  180. / BREAK/ ) !
  181. $E ) *)
  182. (* #TATOM *)
  183. *) .)
  184. ##
  185. -----------------------------------------------
  186. #NUM $RULE
  187. / IF NOT LAST #C $NUMS -> LAST #C $NUMS:=<.$RULE:1.>
  188. ELSIF NOT((LAST #C $NUMS).$RULE)->
  189. LAST #C $NUMS++:=<.$RULE :#LEN(LAST #C $NUMS)+1.>
  190. FI / ##