l_exprs.rig 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. ------------------EXPRESS.RIG ----------------
  2. -- analiz wyravenij RIGAL
  3. --
  4. --********************************************
  5. #wyravenie
  6. $A1 := #EXPR7
  7. (* V'($$ = 'OR') #_KEYWORD
  8. $A2 := #EXPR7
  9. / $A1 := bin_op::<. op: 'OR',
  10. ARG1: $A1,
  11. ARG2: $A2,
  12. type: <. id: T .> .>/ *)
  13. / RETURN $A1/
  14. ##
  15. --------------------------------------------------
  16. #EXPR7
  17. $A1 := #EXPR6
  18. (* V'($$ = 'AND') #_KEYWORD
  19. $A2 := #EXPR6
  20. / $A1 := bin_op::<.op: 'AND',
  21. ARG1: $A1,
  22. ARG2: $A2,
  23. type: <. id: T .> .>/ *)
  24. / RETURN $A1/
  25. ##
  26. --------------------------------------------------
  27. #EXPR6
  28. $A1 := #EXPR5
  29. (* $OP := V'( ($$ = '=') OR ($$ = '<>')
  30. OR ($$ = '>')
  31. OR ($$ = '<') OR ($$ = '>=')
  32. OR ($$ = '<=') )
  33. #_KEYWORD
  34. $A2 := #EXPR5
  35. / $A1 := bin_op::<. op: $OP,
  36. ARG1: $A1,
  37. ARG2: $A2,
  38. type: <. id: T .> .>/ *)
  39. / RETURN $A1/
  40. ##
  41. ---------------------------------------------------
  42. #EXPR5
  43. $A1 := #EXPR4
  44. (* ( V'(($$ = '!.') OR ($$ = '!!') ) / $type:= list/ !
  45. V' ($$ = '++') / $type := tree / !
  46. V'( ($$ = '+') OR ($$ = '-') ) / $type:= num/)
  47. $OP := #_KEYWORD
  48. $A2 := #EXPR4
  49. / $A1 := bin_op::<. op: $OP,
  50. ARG1: $A1,
  51. ARG2: $A2,
  52. type: <. $type: T .> .>/ *)
  53. / RETURN $A1/
  54. ##
  55. ---------------------------------------------------
  56. #EXPR4
  57. $A1 := #EXPR3
  58. (* $OP := V'( ($$ = '*')
  59. OR ($$ = 'DIV') OR ($$ = 'MOD'))
  60. #_KEYWORD
  61. $A2 := #EXPR3
  62. / $A1 := bin_op::<. op: $OP,
  63. ARG1: $A1,
  64. ARG2: $A2,
  65. type: <. num : T .> .>/ *)
  66. / RETURN $A1/
  67. ##
  68. ----------------------------------------------------
  69. #EXPR3
  70. ( V'($$ = 'NOT') / $type:= id / !
  71. V'($$ = '-') / $type := num / )
  72. $OP := #_KEYWORD
  73. $A1 := #EXPR3
  74. / RETURN un_op:: <. op: $OP,
  75. ARG: $A1,
  76. type: <. $type: T .> .>/ ;;
  77. $A1 := #EXPR2 / RETURN $A1/
  78. ##
  79. -----------------------------------------------------
  80. #EXPR2
  81. $A1 := #EXPR1
  82. (* ( ( $OP := V'( $$ = '::') #_KEYWORD
  83. $A2:= #EXPR1 / $type := $A2 . type ++ <. T : T .>/ ) !
  84. ( V'( $$ = '.') #_KEYWORD /$OP := SELECTOR /
  85. $A2 := #EXPR1 / $type:= <. T: T .>/ ) !
  86. ( V'( $$ = '[') #_KEYWORD
  87. $A2 := #wyravenie
  88. V'( $$ = ']') #_KEYWORD
  89. / $OP := INDEX; $type:= <. T: T .> / )
  90. )
  91. / $A1 := bin_op:: <. op: $OP,
  92. ARG1: $A1,
  93. ARG2 : $A2,
  94. type : $type .>/
  95. *)
  96. / RETURN $A1/
  97. ##
  98. ------------------------------------------------------