| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- --****************************************************
- -- S - kod RIGAL - programmy
- -- sozdaetsq fazoj analiza : #programma
- --
- --****************************************************
- #SKOD ##
- --------------------------------------------------
- #S_programma
- (. #S_glawnaq_programma
- (* #S_prawilo *) .)
- ##
- --------------------------------------------------
- #S_glawnaq_programma
- $imq :: (. (* #S_operator *).)
- ##
- ---------------------------------------------------
- #S_prawilo
- $imq :: (. (* ( #S_{ablon ! #S_operator ) *) .)
- ##
- ----------------------------------------------------
- --**************************************************
- -- o p e r a t o r y
- --
- --**************************************************
- #S_operator
- ASSGN:: <. lew: #S_wyravenie ,
- op: ( ':=' ! '+' ! '++' !
- '!.' ! '!!' ) ,
- praw : #S_wyravenie .> ;;
- 'LOAD':: <. VAR : #S_peremennaq ,
- FILE_SPEC : #S_wyravenie .> ;;
- 'SAVE':: <. VAR : #S_peremennaq ,
- FILE_SPEC : #S_wyravenie .> ;;
- 'OPEN' :: <. NAME : $ID ,
- FILE_SPEC : #S_wyravenie .> ;;
- 'PUT' :: <. NAME : $ID ,
- [ arg : (. (* #S_wyravenie *) .) ]
- .> ;;
- 'CLOSE' ;;
- 'PRINT':: (. #S_wyravenie .) ;;
- 'RETURN' :: (. #S_wyravenie .) ;;
- 'FAIL' ;;
- 'FORALL':: <. VAR : #S_peremennaq ,
- 'IN' : #S_wyravenie ,
- BODY : (. (* #S_operator *) .)
- .> ;;
- 'LOOP' :: (. (* #S_operator *) .) ;;
- 'BREAK' :: (. T .) ;;
- 'IF' :: (. (* #S_IF_wetwx *).) ;;
- 'CALL' :: <. NAME : $imq ,
- [ ARGS : (. (* #S_wyravenie *) .)]
- .> ;;
- 'BLTIN':: <. NAME: $Id,
- ARGS: (. (* #S_wyravenie *) .) .> ;;
- ##
- -------------------------------------------------------
- #S_IF_wetwx
- <. COND : #S_wyravenie ,
- BODY : (. (* #S_operator *) .) .>
- ##
- ------------------------------------------------------
- --****************************************************
- --
- -- { a b l o n y
- --****************************************************
- #S_{ablon
- ATM :: <. val: #ATOM,
- type: ( id ! num ! sym ) .> ;;
- 'NULL':: <. type: <. sym: T .> .> ;;
- #S_peremennaq ;;
- call:: <. NAME: $Id,
- type: type .> ;;
- 'LIST' :: <. [ NAME : #S_{ablon_imeni ],
- BODY : (. #S_PLO .) .> ;;
- 'ITERATIVE_LIST':: <. BODY : (. #S_PLO .),
- [ DELIMITER : ( #ATOM !
- #S_imq_prawila )]
- .> ;;
- 'FACULT' :: <. BODY: (. #S_PLO .) .> ;;
- 'ALTERNATIVE'::<. BODY: (.(* (. #S_PLO .) *) .),
- [ type: $type ] .> ;;
- 'TREE':: <. [ NAME : #S_{ablon_imeni ],
- [ BODY:(. (* #S_TREE_EL_T *) .)],
- [ 'LOOP' : (. #S_PLO .)],
- [ loopvar: $S_peremennaq ],
- type: tree .> ;;
- 'VPAT':: <. pat: #S_wyravenie .> ;;
- 'SPAT':: <. pat: #S_wyravenie .> ;;
- PATASSGN :: <. VAR : #S_peremennaq ,
- op: ( ':=' ! '+' ! '!.' ! '!!' ! '++'),
- PAT : #S_{ablon .> ;;
- builtin:: <. NAME: $Id,
- type: type .>
- ##
- -------------------------------------------------------
- #S_TREE_EL_T
- (. #S_PLO .)
- ##
- ----------------------------------------------------
- #S_{ablon_imeni
- ATOM:: (. #ATOM .) ;;
- #S_peremennaq
- ##
- ----------------------------------------------------
- #S_PLO
- (* ( #S_operator ! #S_{ablon ) *)
- ##
- -----------------------------------------------
- --******************************************************
- -- w y r a v e n i q
- --
- --******************************************************
- #S_wyravenie
- CONSTANT:: <. VAL: #ATOM,
- [ tip: $Type ] .> ;;
- 'NULL' ::<. mesto: 'NULL' .> ;;
- #S_peremennaq ;;
- 'LAST':: <. RULE: $ID,
- VAR: $ID1 .> ;;
- 'CONLIST':: <. [ BODY: (. (* #S_wyravenie *)
- .) ]
- .> ;;
- 'CONTREE':: <. [ BODY:
- (. (* #S_wyravenie
- #S_wyravenie *) .)]
- .> ;;
- un_op :: <. op: $op,
- ARG: #S_wyravenie .> ;;
- bin_op::<. op: $op,
- ARG1: #S_wyravenie ,
- ARG2: #S_wyravenie .> ;;
- call:: <. NAME : $ID ,
- [ ARGS : (. (* #S_wyravenie *) .) ] .> ;;
- BLTIN :: <. NAME: $ID,
- [ ARGS: (. (* #S_wyravenie *) .) ] .> ;;
- ##
- --------------------------------------------------------
- #S_peremennaq
- 'VAR'::<. NAME: $ID .>
- -- w tom ~. '_' dlq $
- ##
- ----------------------------------------
- #S_imq_prawila
- 'RULENAME'::<. name: $ID .>
- ##
- ------------------------------------------
- #S_unarnaq_op
- ( 'NOT' ! '-' ! '+' ! 'COPY' ! '$$' )
- / RETURN T/
- ##
- ------------------------------------------
- #S_binarnaq_op
- ('!!' ! '!.' ! '++' !
- '=' ! '<>' ! 'AND' !
- 'OR' ! '+' ! '-' !
- '*' ! 'DIV' ! 'MOD' !
- '>' ! '<' ! '>=' !
- '<=' ! '::' !
- 'INDEX' ! 'SELECTOR' )
- / RETURN T/
- ##
- ------------------------------------------
|