OPS 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. ISTART
  2. FN() {
  3. teff() ; tass() ; tsta() ; tasssta() ; tiff() ; tifass() ;
  4. return 0 ;
  5. }
  6. teff() {
  7. /* simple operator test */
  8. /* first evaluate for side effects */
  9. LSTART
  10. X + Y
  11. X - Y
  12. X / Y
  13. X % Y
  14. X * Y
  15. X & Y
  16. X | Y
  17. X ^ Y
  18. X || Y
  19. X && Y
  20. X << S
  21. X >> S
  22. -X
  23. !X
  24. ~X
  25. X == Y
  26. X != Y
  27. X <= Y
  28. X >= Y
  29. X < Y
  30. X > Y
  31. X ? X : Y
  32. }
  33. tass() {
  34. LSTART
  35. /* assignment ops */
  36. Z1 = X
  37. Z1 += X
  38. Z1 -= X
  39. Z1 /= X
  40. Z1 %= X
  41. Z1 *= X
  42. Z1 &= X
  43. Z1 |= X
  44. Z1 ^= X
  45. Z1 <<= S
  46. Z1 >>= S
  47. Z1 ++
  48. Z1 --
  49. -- Z1
  50. ++ Z1
  51. }
  52. tsta() {
  53. /* secondly evaluate and use the value */
  54. LSTART
  55. Z2 = ( X + Y )
  56. Z2 = ( X - Y )
  57. Z2 = ( X / Y )
  58. Z2 = ( X % Y )
  59. Z2 = ( X * Y )
  60. Z2 = ( X & Y )
  61. Z2 = ( X | Y )
  62. Z2 = ( X ^ Y )
  63. Z2 = ( X || Y )
  64. Z2 = ( X && Y )
  65. Z2 = ( X << S )
  66. Z2 = ( X >> S )
  67. Z2 = ( -X )
  68. Z2 = ( !X )
  69. Z2 = ( ~X )
  70. Z2 = ( X == Y )
  71. Z2 = ( X != Y )
  72. Z2 = ( X <= Y )
  73. Z2 = ( X >= Y )
  74. Z2 = ( X < Y )
  75. Z2 = ( X > Y )
  76. Z2 = ( X ? X : Y )
  77. }
  78. tasssta() {
  79. /* assignment ops */
  80. LSTART
  81. Z2 = ( Z1 = X )
  82. Z2 = ( Z1 += X )
  83. Z2 = ( Z1 -= X )
  84. Z2 = ( Z1 /= X )
  85. Z2 = ( Z1 %= X )
  86. Z2 = ( Z1 *= X )
  87. Z2 = ( Z1 &= X )
  88. Z2 = ( Z1 |= X )
  89. Z2 = ( Z1 ^= X )
  90. Z2 = ( Z1 <<= S )
  91. Z2 = ( Z1 >>= S )
  92. Z2 = ( Z1 ++ )
  93. Z2 = ( Z1 -- )
  94. Z2 = ( -- Z1 )
  95. Z2 = ( ++ Z1 )
  96. }
  97. tiff() {
  98. LSTART
  99. /* conditional context */
  100. if ( X + Y ) yes() ; else no()
  101. if ( X - Y ) yes() ; else no()
  102. if ( X / Y ) yes() ; else no()
  103. if ( X % Y ) yes() ; else no()
  104. if ( X * Y ) yes() ; else no()
  105. if ( X & Y ) yes() ; else no()
  106. if ( X | Y ) yes() ; else no()
  107. if ( X ^ Y ) yes() ; else no()
  108. if ( X || Y ) yes() ; else no()
  109. if ( X && Y ) yes() ; else no()
  110. if ( X << S ) yes() ; else no()
  111. if ( X >> S ) yes() ; else no()
  112. if ( -X ) yes() ; else no()
  113. if ( !X ) yes() ; else no()
  114. if ( ~X ) yes() ; else no()
  115. if ( X == Y ) yes() ; else no()
  116. if ( X != Y ) yes() ; else no()
  117. if ( X <= Y ) yes() ; else no()
  118. if ( X >= Y ) yes() ; else no()
  119. if ( X < Y ) yes() ; else no()
  120. if ( X > Y ) yes() ; else no()
  121. if ( X ? X : Y ) yes() ; else no()
  122. }
  123. tifass() {
  124. LSTART
  125. /* assignment ops */
  126. if ( Z1 = X ) yes() ; else no()
  127. if ( Z1 += X ) yes() ; else no()
  128. if ( Z1 -= X ) yes() ; else no()
  129. if ( Z1 /= X ) yes() ; else no()
  130. if ( Z1 %= X ) yes() ; else no()
  131. if ( Z1 *= X ) yes() ; else no()
  132. if ( Z1 &= X ) yes() ; else no()
  133. if ( Z1 |= X ) yes() ; else no()
  134. if ( Z1 ^= X ) yes() ; else no()
  135. if ( Z1 <<= S ) yes() ; else no()
  136. if ( Z1 >>= S ) yes() ; else no()
  137. if ( Z1 ++ ) yes() ; else no()
  138. if ( Z1 -- ) yes() ; else no()
  139. if ( -- Z1 ) yes() ; else no()
  140. if ( ++ Z1 ) yes() ; else no()
  141. }
  142. yes() { printf("yes ") ; }
  143. no() { printf("no ") ; }