l_expr1.rig 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. ------------- EXPR1.RIG -----------------------------
  2. ------------------------------------------------------
  3. #EXPR1
  4. -- (. ... .)
  5. V'($$ = '(.') #_KEYWORD
  6. (* $E1 := #wyravenie
  7. / $E !.:= $E1 / *)
  8. V'($$ = '.)') #_KEYWORD
  9. / RETURN CONLIST :: <. BODY: $E,
  10. type: <. list: T .> .> / ;;
  11. -- <. ... .>
  12. V'($$ = '<.') #_KEYWORD
  13. (* $ID := #wyravenie
  14. V'($$ = ':') #_KEYWORD
  15. $E := #wyravenie
  16. / $R !.:= $ID; $R !.:= $E /
  17. * #COMMA )
  18. V'($$ = '.>') #_KEYWORD
  19. / RETURN CONTREE:: <. BODY: $R,
  20. type: <. tree: T .> .> / ;;
  21. -- LAST
  22. V'($$ = 'LAST') #_KEYWORD
  23. $ID := #_RULETOATM
  24. $E := #_VARNTOATM
  25. / $type := #TAB ( $ID $E);
  26. RETURN 'LAST':: <. RULE: $ID,
  27. VAR: $E,
  28. type: $type .>/ ;;
  29. -- COPY
  30. V'( $$ = 'COPY') #_KEYWORD
  31. V'($$ = '(') #_KEYWORD
  32. $E := #wyravenie
  33. V'( $$ = ')') #_KEYWORD
  34. / RETURN un_op:: <. op: 'COPY',
  35. ARG: $E,
  36. type: <. T : T .> ++ $E . type .> / ;;
  37. -- #LLL ( X Y Z )
  38. $ID := #_RULETOATM
  39. V'($$ = '(') #_KEYWORD
  40. / $type := #BUILTIN( $ID);
  41. IF $type -> $call := BLTIN
  42. ELSIF T -> $call := CALL ;
  43. $type := LAST #Lint $Rules . $ID;
  44. IF NOT $type -> $type:= <. T : T .>;
  45. LAST #Lint $Rules ++:= <. $ID : $type .>
  46. FI FI /
  47. (* $E !.:= #wyravenie *)
  48. V'($$= ')') #_KEYWORD
  49. / RETURN $call :: <. NAME: $ID,
  50. ARGS: $E,
  51. type: $type .> / ;;
  52. -- $$
  53. V'($$ = '$$') #_KEYWORD
  54. / RETURN 'VAR'::<. NAME: '$$',
  55. type: <. T : T .> .>/ ;;
  56. -- $VVV
  57. $ID := #_VARNTOATM
  58. / $type := #TAB( LAST #program $name $ID);
  59. RETURN VAR:: <. NAME: $ID,
  60. type: $type .>/ ;;
  61. -- NULL
  62. V'(#_CONTENT2($$)= 0)
  63. #_SPECDESC
  64. /RETURN 'NULL'::<. type: <. T : T .> .>/ ;;
  65. -- ATOM
  66. V'( NOT #_KEYWORD($$))
  67. $E := #ATOM
  68. / IF #NUMBER( $E) -> $type:= num
  69. ELSIF #IDENT( $E ) -> $type := id
  70. ELSIF T -> $type := sym FI ;
  71. RETURN CONSTANT::<. VAL: $E,
  72. type: <. $type: T .> .> / ;;
  73. -- ( EXPR )
  74. V'($$ = '(') #_KEYWORD
  75. $E1 := #wyravenie
  76. V'($$ = ')') #_KEYWORD
  77. / RETURN $E1/
  78. ##
  79. ---------------------------------------------------