l_patt.rig 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. ------------- PATTERN.RIG ----------------------
  2. -- analiz {ablonow RIGAL
  3. --
  4. --***********************************************
  5. #|l_t_posled_{ablonow
  6. -- (* .... *) i (* .... * DELIM )
  7. V'($$ = '(*') #_KEYWORD
  8. (* $E !!:= #PLO *)
  9. ( ( V'($$ = '*)') #_KEYWORD ) !
  10. ( V'( $$ = '*') #_KEYWORD
  11. $D:=#prostoj_{ablon V'($$ = ')') #_KEYWORD
  12. ))
  13. / RETURN 'ITERATIVE_LIST':: <. BODY: $E,
  14. DELIMITER: $D .>/ ;;
  15. -- (+ .... +) i (+ .... + DELIM )
  16. V'($$ = '(+') #_KEYWORD
  17. (* $E !!:= #PLO *)
  18. ( ( V'( $$ = '+)') #_KEYWORD ) !
  19. ( V'($$ = '+') #_KEYWORD
  20. $D:=#prostoj_{ablon
  21. V'($$ = ')') #_KEYWORD
  22. ))
  23. / RETURN 'ITERATIVE_LIST':: <. BODY: $E,
  24. DELIMITER: $D .>/ ;;
  25. -- [ ... ]
  26. V'($$ = '[' ) #_KEYWORD
  27. (* $E !!:= #PLO *)
  28. V'($$ = ']' ) #_KEYWORD
  29. / RETURN 'FACULT':: <. BODY: $E .>/ ;;
  30. -- ( ... ! ... ! ... )
  31. V'($$ = '(') #_KEYWORD
  32. (* / $E := NULL/ (* $E !!:= #PLO *) /$E1!.:= $E/
  33. * #ALTERNATIVE_SYMBOL )
  34. V'( $$ = ')') #_KEYWORD
  35. / RETURN ALTERNATIVE:: <. BODY: $E .> / ;;
  36. -- {ablon
  37. $E := #{ablon /RETURN $E/
  38. ##
  39. -----------------------------------------------------
  40. #ALTERNATIVE_SYMBOL
  41. V'($$ = '!')
  42. #_KEYWORD
  43. ##
  44. -----------------------------------------------------
  45. #{ablon
  46. [ $V := #_VARNTOATM
  47. / $vartype := #TAB(LAST #program $name $V ) /
  48. ( ( $ASS_SYMBOL := V'( $$ = ':=') #_KEYWORD ) !
  49. ( ( $ASS_SYMBOL := V'( $$ = '!.' OR $$ ='!!')
  50. / $vartype++:= <. list: T .>/ !
  51. $ASS_SYMBOL := V'( $$ = '+')
  52. / $vartype ++:= <. num : T .> / !
  53. $ASS_SYMBOL := V'( $$ = '++')
  54. / $vartype ++:= <. tree : T .>/ )
  55. #_KEYWORD V'( $$ = ':=') #_KEYWORD)
  56. ) ]
  57. $P := #prostoj_{ablon
  58. / IF $ASS_SYMBOL ->
  59. IF $ASS_SYMBOL = ':=' -> $vartype ++:= $P . type FI;
  60. RETURN PATASSGN :: <. VAR: VAR:: <. NAME: $V,
  61. type: $vartype .>,
  62. op: $ASS_SYMBOL,
  63. PAT: $P .>
  64. ELSIF T -> RETURN $P FI /
  65. ##
  66. -------------------------------------------