l_patt2.rig 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. ----------------- PATTERN2.RIG -----------------
  2. #prostoj_{ablon
  3. -- (. ... .) , <. ... .> , <* ... *>
  4. $E := ( #{ablon_spiska !
  5. #{ablon_derewa ) /RETURN $E/ ;;
  6. -- NULL
  7. V'(#_CONTENT2($$)= 0) #_SPECDESC
  8. /RETURN 'NULL'::<. type: <.T : T .> .>/ ;;
  9. -- ATOM
  10. V'(NOT #_KEYWORD($$))
  11. $E := #ATOM
  12. / IF #NUMBER( $E) -> $type:= num
  13. ELSIF #IDENT( $E ) -> $type := id
  14. ELSIF T -> $type := sym
  15. FI;
  16. RETURN ATM:: <. VAL: $E,
  17. type: <. $type: T .> .> / ;;
  18. -- $XXX
  19. $E := #_VARNTOATM
  20. / $type:= #TAB( LAST #program $name $E );
  21. $X := #EXPLODE( $E )[1];
  22. IF $X = I OR $X = i -> $T1 := id
  23. ELSIF $X = N OR $X = n -> $T1 := num FI;
  24. IF $T1 -> $type ++:= <. $T1 : T .> FI;
  25. RETURN 'VAR'::<. NAME: $E,
  26. type: $type .>/ ;;
  27. -- #RRRR
  28. $E := #_RULETOATM
  29. / $S:= #BUILTIN( $E);
  30. IF $S -> $call := builtin;
  31. ELSIF T -> $call := call;
  32. $S := LAST #Lint $Rules . $E;
  33. IF NOT $S -> $S := <. T : T .>;
  34. LAST #Lint $Rules ++:= <. $E : $S .>
  35. FI FI;
  36. RETURN $call :: <. NAME: $E, type: $S .> /;;
  37. --S'( EXPR )
  38. V'($$ = #IMPLODE( S #CHR( 39)) )
  39. -- V'($$ = S''' )
  40. #_KEYWORD
  41. V'($$ = '(') #_KEYWORD
  42. $E := #wyravenie
  43. V'($$ = ')') #_KEYWORD
  44. / RETURN SPAT:: <. pat: $E .>/ ;;
  45. --V'( EXPR )
  46. V'( $$ = #IMPLODE( V #CHR(39)) )
  47. -- V'( $$ = V''')
  48. #_KEYWORD
  49. V'( $$ = '(') #_KEYWORD
  50. $E := #wyravenie
  51. V'( $$ = ')') #_KEYWORD
  52. / RETURN VPAT:: <. pat: $E .>/ ;;
  53. -- ( ... ! ... ! ... )
  54. V'($$ = '(') #_KEYWORD
  55. (* / $S := NULL/
  56. [ $S := #dejstwiq ]
  57. $S1 := #prostoj_{ablon
  58. / $S !.:= $S1; $X := $S1 . type;
  59. IF $X -> $type ++:= $X FI /
  60. [ $S !!:= #dejstwiq ] / $E !.:= $S/
  61. * #ALTERNATIVE_SYMBOL )
  62. V'($$ = ')') #_KEYWORD
  63. / RETURN 'ALTERNATIVE':: <. type : $type,
  64. BODY : $E .>/
  65. ##
  66. ------------------------------------------------------
  67. #{ablon_spiska
  68. [ $E := #NAME_PAT ]
  69. V'($$ = '(.') #_KEYWORD
  70. (* $R !!:= #PLO *)
  71. V'($$ = '.)') #_KEYWORD
  72. / RETURN 'LIST':: <. NAME: $E,
  73. type: <. list : T .>,
  74. BODY: $R .>/
  75. ##
  76. ---------------------------------------------------