123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- -- postroenie tablicy perekrestnyh ssylok
- -- dlq RIGAL -programm
- -- riga wc lgu 16.03.88
- --------------------------------------------------
- -- Changed 6-dec-1989 : added #TATOM, better list output.
- -- added numbers
- #C
- -- whod: XXXXX.S1
- -- wyhod: XXXXX.CRF
- --
- -- globalxnye peremennye
- -- $TAB <* imq_prawila : <* imq_peremennoj :
- -- nomer_peremennoj *>
- -- *>
- --
- -- $CALLS <* prawilo-hozqin :
- -- <* prawilo-sluga : t *> *>
- -- $CALLED <* prawilo-sluga :
- -- <* prawilo-hozqin : t *> *>
- -- $USE_LAST <* prawilo-potrebitelx :
- -- <* prawilo-hozqin :
- -- <* peremennaq : t *>
- -- *> *>
- -- $USED_LAST <* prawilo-hozqin :
- -- <* peremennaq :
- -- <* prawilo-potrebitelx *>
- -- *> *>
- -- $RLIST <* prawilo: T *>
- -- spisok prawil , ime`}ih opredeleniq
- -- $NUMS <* prawilo : $NUMBER *>
- -- spisok nomerow prawil, ime`}ih opredeleniq i LAST-ssylki
- --------------------------------------------------
- $L:=#PARM(T);
- $L:= $L[1];
- $M:=#CALL_PAS(14 #IMPLODE($L '.rig'));
- OPEN LST #IMPLODE( $L '.crf' );
- OPEN CRT #IMPLODE( $L '.crt' );
- OPEN ERR ' ';
- LST <<@ 'START OF CROSS REFERENCE FOR ' $L '.RIG';
- LST <<'-------------------------------------------------------';
- CRT <<@ 'START OF CROSS REFERENCE FOR ' $L '.RIG';
- ERR <<@ 'START OF CROSS REFERENCE FOR ' $L '.RIG';
- ERR <<@ 'LU RIGA / JAN 1990 / IBM/PC VERSION ';
- #programma ( $M );
- FORALL $R IN $NUMS DO
- $X:=$CALLS.$R;
- IF $X -> CRT<<@ 'R' $NUMS.$R '--->';
- FORALL $V IN $X DO
- IF $NUMS.$V-> CRT<]@ ' R' $NUMS.$V FI OD FI OD;
- CRT << '******************************';
- FORALL $R IN $NUMS DO
- $X:=$CALLED.$R;
- IF $X -> CRT<<@ 'R' $NUMS.$R '<----';
- FORALL $V IN $X DO
- IF $NUMS.$V-> CRT<]@ ' R' $NUMS.$V FI OD FI OD;
- FORALL $R IN $TAB DO
- LST<< @ '[' $NUMS.$R '] RULE #' $R;
- IF $RLIST .$R =NULL ->
- LST<] ' ***UNDEFINED***' FI;
- $X:= $CALLS .$R;
- IF $X -> LST<< ' CALLS RULES:';
- FORALL $V IN $X DO
- LST<] ' ' @ ' #' $V ;
- IF $NUMS.$V -> LST<] @ '[' $NUMS.$V ']' FI
- OD
- FI;
- $X:= $CALLED .$R;
- IF $X -> LST<<' CALLED BY RULES:';
- FORALL $V IN $X DO
- LST<] ' ' @ ' #' $V '[' $NUMS.$V ']' OD
- FI;
- $X:= $TAB .$R;
- IF $X -> LST<< @ ' VARIABLES( ' #LEN( $X) '):';
- FORALL $V IN $X DO
- LST<] ' ' @ ' $' $V OD
- FI;
- $X:= $USED_LAST .$R;
- IF $X -> LST<< @ ' GLOBAL VARIABLES( '
- #LEN( $X) '):';
- FORALL $V IN $X DO
- $Y:= $X .$V;
- FORALL $W IN $Y DO
- LST<< @ ' $' $V ' USED BY #' $W '[' $NUMS.$W ']'
- OD
- OD
- FI;
- $X:= $USE_LAST .$R;
- IF $X -> LST<< ' USES GLOBAL VARIABLES:';
- FORALL $V IN $X DO
- $Y:= $X .$V;
- FORALL $W IN $Y DO
- LST<< @ ' LAST #' $V '[' $NUMS.$V '] $' $W
- OD
- OD
- FI ;
- LST<<'------------------------------------------------'
- OD;
- ERR <<@ 'O.K. CROSS REFERENCE READY IN ' $L '.CRF & .CRT' ;
- ERR <<;
- ##
- ----------------------------------------------------
- #USE_LAST
- $pra $per
- /$tp:= LAST #programma $tek_prawilo;
- $A:= LAST #C $USE_LAST . $tp;
- $B:= $A . $pra;
- $C:= $B . $per;
- IF $A= NULL -> LAST #C $USE_LAST ++:= <. $tp:
- <. $pra: <. $per: T .> .> .>
- ELSIF $B = NULL -> $A ++:= <. $pra: <. $per: T .>
- .>
- ELSIF $C = NULL -> $B ++:= <. $per: T .> FI;
- $A:= LAST #C $USED_LAST . $pra;
- $B := $A .$per;
- $C := $B . $tp;
- IF $A = NULL -> LAST #C $USED_LAST ++:= <. $pra:
- <. $per: <. $tp: T .> .> .>
- ELSIF $B = NULL -> $A ++:= <. $per: <. $tp: T .>
- .>
- ELSIF $C = NULL -> $B ++:= <. $tp: T .> FI /
- ##
- --------------------------------------------------------
- #CALL
- $CLD
- / $CLS:= LAST #programma $tek_prawilo;
- $A:= LAST #C $CALLS . $CLS;
- $B:= LAST #C $CALLED . $CLD;
- IF $A -> $A ++:= <. $CLD: T .>
- ELSIF T -> LAST #C $CALLS ++:= <. $CLS:
- <. $CLD: T .> .>
- FI;
- IF $B -> $B ++:= <. $CLS: T .>
- ELSIF T -> LAST #C $CALLED ++:= <. $CLD:
- <. $CLS: T .> .> FI /
- ##
- --------------------------------------------------
- #TAB
- -- zanesenie w $TAB
- $imq_prawila $imq_peremennoj
- /$T := LAST #C $TAB. $imq_prawila;
- $NOM := $T.$imq_peremennoj;
- IF $T = NULL -> LAST #C $TAB ++:=
- <. $imq_prawila : <. '_':0,
- $imq_peremennoj : 1 .> .>
- ELSIF $NOM = NULL -> $T ++:=
- <. $imq_peremennoj : #LEN($T) .> FI/ ;;
- $imq_prawila
- / $T := LAST #C $TAB.$imq_prawila;
- IF $T = NULL -> LAST #C $TAB ++:=
- <. $imq_prawila : <. '_' : 0 .> .> FI/
- ##
- ----------------------------------------------------
- -- analiz RIGAL- programmy
- -- i postroenie tablic
- ---------------------------------------------
- #programma
- -- globalxn. peremennye
- -- $tek_prawilo = imq tek.prawila dlq dostupa w $TAB
- ----------------------------------------------------
- (. (*
- $tek_prawilo := #_RULETOATM
- / #NUM ( $tek_prawilo );
- #TAB ( $tek_prawilo );
- $I+:=1;ERR<< $I @
- '**prawilo #' $tek_prawilo;
- LAST #C $RLIST ++:=
- <. $tek_prawilo: T.>/
- (* ( ( $ID:= #_VARNTOATM
- / #TAB( $tek_prawilo $ID)/) !
- ( $ID:= #_RULETOATM
- / #CALL( $ID)/ ) !
- ( V'($$ = 'LAST')
- #_KEYWORD
- $ID:= #_RULETOATM
- $E:= #_VARNTOATM
- /#NUM($ID); #TAB( $ID $E );
- #USE_LAST( $ID $E )/ ) !
- ( V'($$ ='##')
- #_KEYWORD
- / BREAK/ ) !
- $E ) *)
- (* #TATOM *)
- *) .)
- ##
- -----------------------------------------------
- #NUM $RULE
- / IF NOT LAST #C $NUMS -> LAST #C $NUMS:=<.$RULE:1.>
- ELSIF NOT((LAST #C $NUMS).$RULE)->
- LAST #C $NUMS++:=<.$RULE :#LEN(LAST #C $NUMS)+1.>
- FI / ##
|