l_operat.rig 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. ---------------------------------------------
  2. -- OPERATOR.RIG
  3. ---------------------------------------------
  4. #operator2
  5. -- RETURN , PRINT
  6. V'(($$ = 'RETURN') OR ($$ = 'PRINT'))
  7. $OP:= #_KEYWORD
  8. $E := #wyravenie
  9. / IF $OP= 'RETURN' ->
  10. LAST #Lint $Rules . LAST #program $name ++:= $E.type;
  11. FI;
  12. RETURN $OP :: (. $E .) / ;;
  13. -- FORALL
  14. V'( $$ = 'FORALL') #_KEYWORD
  15. $VAR := #_VARNTOATM
  16. / $item := #TAB (LAST #program $name $VAR)/
  17. V'( $$ = 'IN') #_KEYWORD
  18. $E := #wyravenie
  19. V'($$ = 'DO') #_KEYWORD
  20. (* $OPS !. := #operator * ';' ) [ ';' ]
  21. V'($$ = 'OD') #_KEYWORD
  22. / RETURN 'FORALL' :: <. VAR: VAR::<. NAME: $VAR,
  23. type: $item .>,
  24. 'IN' : $E,
  25. BODY: $OPS .>/ ;;
  26. -- LOOP
  27. V'($$ = 'LOOP') #_KEYWORD
  28. (* $OPS !.:= #operator * ';' ) [ ';' ]
  29. V'($$ = 'END') #_KEYWORD
  30. / RETURN 'LOOP' :: $OPS / ;;
  31. -- BREAK, FAIL
  32. V'(( $$ = 'BREAK') OR ( $$ = 'FAIL'))
  33. $OP:= #_KEYWORD
  34. / RETURN $OP / ;;
  35. -- RULE CALL
  36. $ID := #_RULETOATM
  37. V'( $$ = '(' ) #_KEYWORD
  38. / IF #BUILTIN( $ID ) -> $CALL := BLTIN
  39. ELSIF T -> $CALL := CALL FI /
  40. (* $E !.:= #wyravenie *)
  41. V'($$ = ')') #_KEYWORD
  42. / RETURN $CALL :: <. NAME: $ID,
  43. ARGS: $E .>/ ;;
  44. -- var := expr
  45. $Id := #_VARNTOATM
  46. / $type := #TAB ( LAST #program $name $Id )/
  47. ( $OP:= ':=' !
  48. $OP := ( '!.' ! '!!' ) / $type ++:=<. list: T .>/ !
  49. ( $OP := '++' ':=') / $type ++:= <. tree : T .>/ !
  50. ( $OP := '+' ':=') / $type ++:= <. num : T .> / )
  51. $RIGHT := #wyravenie
  52. / IF $OP = ':=' -> $type ++:= $RIGHT .type FI;
  53. RETURN ASSGN:: <. op: $OP,
  54. praw: $RIGHT,
  55. lew: VAR:: <. NAME: $Id,
  56. type: $type .> .>/ ;;
  57. -- LAST lll var := expr
  58. V'( $$= 'LAST') #_KEYWORD
  59. $Id := #_RULETOATM
  60. $E := #_VARNTOATM / $type := #TAB( $Id $E)/
  61. ( $OP := ':=' !
  62. $OP := ( '!.' ! '!!' ) /$type++:= <. list: T .>/ !
  63. ( $OP := '++' ':=' ) /$type++:= <. tree : T .>/ !
  64. ( $OP := '+' ':=' ) /$type++:= <. num : T.>/ )
  65. $RIGHT := #wyravenie
  66. / IF $OP = ':=' -> $type ++:= $RIGHT . type FI;
  67. RETURN ASSGN:: <. op: $OP,
  68. praw: $RIGHT,
  69. lew: 'LAST':: <. RULE: $Id,
  70. VAR: $E,
  71. type: $type .> .>/;;
  72. -- :=
  73. $LEFT := #wyravenie
  74. $OP := ( ':=' ! '!.' ! '!!' ! '++' ! '+' ) [ ':=' ]
  75. $RIGHT := #wyravenie
  76. / RETURN ASSGN :: <. op: $OP,
  77. praw: $RIGHT,
  78. lew: $LEFT .>/
  79. ##
  80. ----------------------------------------------------