scode.rig 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. --****************************************************
  2. -- S - kod RIGAL - programmy
  3. -- sozdaetsq fazoj analiza : #programma
  4. --
  5. --****************************************************
  6. #SKOD ##
  7. --------------------------------------------------
  8. #S_programma
  9. (. #S_glawnaq_programma
  10. (* #S_prawilo *) .)
  11. ##
  12. --------------------------------------------------
  13. #S_glawnaq_programma
  14. $imq :: (. (* #S_operator *).)
  15. ##
  16. ---------------------------------------------------
  17. #S_prawilo
  18. $imq :: (. (* ( #S_{ablon ! #S_operator ) *) .)
  19. ##
  20. ----------------------------------------------------
  21. --**************************************************
  22. -- o p e r a t o r y
  23. --
  24. --**************************************************
  25. #S_operator
  26. ASSGN:: <. lew: #S_wyravenie ,
  27. op: ( ':=' ! '+' ! '++' !
  28. '!.' ! '!!' ) ,
  29. praw : #S_wyravenie .> ;;
  30. 'LOAD':: <. VAR : #S_peremennaq ,
  31. FILE_SPEC : #S_wyravenie .> ;;
  32. 'SAVE':: <. VAR : #S_peremennaq ,
  33. FILE_SPEC : #S_wyravenie .> ;;
  34. 'OPEN' :: <. NAME : $ID ,
  35. FILE_SPEC : #S_wyravenie .> ;;
  36. 'PUT' :: <. NAME : $ID ,
  37. [ arg : (. (* #S_wyravenie *) .) ]
  38. .> ;;
  39. 'CLOSE' ;;
  40. 'PRINT':: (. #S_wyravenie .) ;;
  41. 'RETURN' :: (. #S_wyravenie .) ;;
  42. 'FAIL' ;;
  43. 'FORALL':: <. VAR : #S_peremennaq ,
  44. 'IN' : #S_wyravenie ,
  45. BODY : (. (* #S_operator *) .)
  46. .> ;;
  47. 'LOOP' :: (. (* #S_operator *) .) ;;
  48. 'BREAK' :: (. T .) ;;
  49. 'IF' :: (. (* #S_IF_wetwx *).) ;;
  50. 'CALL' :: <. NAME : $imq ,
  51. [ ARGS : (. (* #S_wyravenie *) .)]
  52. .> ;;
  53. 'BLTIN':: <. NAME: $Id,
  54. ARGS: (. (* #S_wyravenie *) .) .> ;;
  55. ##
  56. -------------------------------------------------------
  57. #S_IF_wetwx
  58. <. COND : #S_wyravenie ,
  59. BODY : (. (* #S_operator *) .) .>
  60. ##
  61. ------------------------------------------------------
  62. --****************************************************
  63. --
  64. -- { a b l o n y
  65. --****************************************************
  66. #S_{ablon
  67. ATM :: <. val: #ATOM,
  68. type: ( id ! num ! sym ) .> ;;
  69. 'NULL':: <. type: <. sym: T .> .> ;;
  70. #S_peremennaq ;;
  71. call:: <. NAME: $Id,
  72. type: type .> ;;
  73. 'LIST' :: <. [ NAME : #S_{ablon_imeni ],
  74. BODY : (. #S_PLO .) .> ;;
  75. 'ITERATIVE_LIST':: <. BODY : (. #S_PLO .),
  76. [ DELIMITER : ( #ATOM !
  77. #S_imq_prawila )]
  78. .> ;;
  79. 'FACULT' :: <. BODY: (. #S_PLO .) .> ;;
  80. 'ALTERNATIVE'::<. BODY: (.(* (. #S_PLO .) *) .),
  81. [ type: $type ] .> ;;
  82. 'TREE':: <. [ NAME : #S_{ablon_imeni ],
  83. [ BODY:(. (* #S_TREE_EL_T *) .)],
  84. [ 'LOOP' : (. #S_PLO .)],
  85. [ loopvar: $S_peremennaq ],
  86. type: tree .> ;;
  87. 'VPAT':: <. pat: #S_wyravenie .> ;;
  88. 'SPAT':: <. pat: #S_wyravenie .> ;;
  89. PATASSGN :: <. VAR : #S_peremennaq ,
  90. op: ( ':=' ! '+' ! '!.' ! '!!' ! '++'),
  91. PAT : #S_{ablon .> ;;
  92. builtin:: <. NAME: $Id,
  93. type: type .>
  94. ##
  95. -------------------------------------------------------
  96. #S_TREE_EL_T
  97. (. #S_PLO .)
  98. ##
  99. ----------------------------------------------------
  100. #S_{ablon_imeni
  101. ATOM:: (. #ATOM .) ;;
  102. #S_peremennaq
  103. ##
  104. ----------------------------------------------------
  105. #S_PLO
  106. (* ( #S_operator ! #S_{ablon ) *)
  107. ##
  108. -----------------------------------------------
  109. --******************************************************
  110. -- w y r a v e n i q
  111. --
  112. --******************************************************
  113. #S_wyravenie
  114. CONSTANT:: <. VAL: #ATOM,
  115. [ tip: $Type ] .> ;;
  116. 'NULL' ::<. mesto: 'NULL' .> ;;
  117. #S_peremennaq ;;
  118. 'LAST':: <. RULE: $ID,
  119. VAR: $ID1 .> ;;
  120. 'CONLIST':: <. [ BODY: (. (* #S_wyravenie *)
  121. .) ]
  122. .> ;;
  123. 'CONTREE':: <. [ BODY:
  124. (. (* #S_wyravenie
  125. #S_wyravenie *) .)]
  126. .> ;;
  127. un_op :: <. op: $op,
  128. ARG: #S_wyravenie .> ;;
  129. bin_op::<. op: $op,
  130. ARG1: #S_wyravenie ,
  131. ARG2: #S_wyravenie .> ;;
  132. call:: <. NAME : $ID ,
  133. [ ARGS : (. (* #S_wyravenie *) .) ] .> ;;
  134. BLTIN :: <. NAME: $ID,
  135. [ ARGS: (. (* #S_wyravenie *) .) ] .> ;;
  136. ##
  137. --------------------------------------------------------
  138. #S_peremennaq
  139. 'VAR'::<. NAME: $ID .>
  140. -- w tom ~. '_' dlq $
  141. ##
  142. ----------------------------------------
  143. #S_imq_prawila
  144. 'RULENAME'::<. name: $ID .>
  145. ##
  146. ------------------------------------------
  147. #S_unarnaq_op
  148. ( 'NOT' ! '-' ! '+' ! 'COPY' ! '$$' )
  149. / RETURN T/
  150. ##
  151. ------------------------------------------
  152. #S_binarnaq_op
  153. ('!!' ! '!.' ! '++' !
  154. '=' ! '<>' ! 'AND' !
  155. 'OR' ! '+' ! '-' !
  156. '*' ! 'DIV' ! 'MOD' !
  157. '>' ! '<' ! '>=' !
  158. '<=' ! '::' !
  159. 'INDEX' ! 'SELECTOR' )
  160. / RETURN T/
  161. ##
  162. ------------------------------------------