l_anal.rig 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. -------------------------------------------------
  2. -- ANALYSIS.RIG
  3. -------------------------------------------------
  4. #program
  5. (.
  6. [ $name := #_RULETOATM
  7. / LAST #Lint $Rules := <. $name: <. T:T .> .>/
  8. (* $E !.:= #operator * ';' ) [ ';' ]
  9. V' ($$='##') #_KEYWORD
  10. / $E1 !.:= $name :: $E;
  11. Display << @ 'Analyzing main rule #' $name / ]
  12. (* #ATOM *) -- for scanner's include names
  13. (* $name := #_RULETOATM
  14. / LAST #Lint $Rules ++:= <. $name: <. T:T .> .>;
  15. Display << @ 'Analyzing rule #' $name;
  16. $E := NULL /
  17. (* $E !!:= #PLO
  18. [ V'( $$ = 'ONFAIL') #_KEYWORD
  19. (* $E !.:= #operator *) ]
  20. [ V'( $$ = ';;' ) #_KEYWORD ] *)
  21. V'($$ ='##') #_KEYWORD
  22. (* #ATOM *) -- for scanner's include names
  23. / $E1 !.:= $name :: $E / *)
  24. .)
  25. / RETURN $E1 /
  26. ##
  27. -----------------------------------------------------
  28. #PLO
  29. -- PATTERN LIST OR OPERATOR
  30. -- wozwra}aet spisok
  31. ( $E !! := #dejstwiq !
  32. $E !. := #|l_t_posled_{ablonow )
  33. /RETURN $E /
  34. ##
  35. ------------------------------------------------------
  36. #dejstwiq
  37. (+ V'( $$ = '/') #_KEYWORD
  38. (* $E !. := #operator
  39. * ';' ) [ ';' ]
  40. V'( $$ = '/' ) #_KEYWORD
  41. +)
  42. / RETURN $E /
  43. ##
  44. -----------------------------------------
  45. #operator
  46. $X:= ( #operator1 ! #operator2 ) /RETURN $X/
  47. ##
  48. --------------------------------------------
  49. #operator1
  50. -- IF
  51. V'( $$ = 'IF') #_KEYWORD
  52. $COND := #wyravenie
  53. V'( $$ = '->') #_KEYWORD
  54. (* $OPS !. := #operator * ';' ) [ ';' ]
  55. / $R !. := <. COND: $COND,
  56. BODY: $OPS .>/
  57. (* V'($$ = 'ELSIF') #_KEYWORD
  58. $COND := #wyravenie
  59. V'($$ = '->') #_KEYWORD
  60. / $OPS := NULL /
  61. (* $OPS !. := #operator * ';' ) [ ';' ]
  62. / $R !. := <. COND: $COND,
  63. BODY: $OPS .>/
  64. *)
  65. V'($$ = 'FI' ) #_KEYWORD
  66. /RETURN 'IF' :: $R / ;;
  67. -- LOAD , SAVE
  68. V'(( $$ = 'LOAD') OR ($$ = 'SAVE')) $OP:= #_KEYWORD
  69. $VAR := #_VARNTOATM
  70. $FSPEC := #wyravenie
  71. / RETURN $OP :: <. VAR: $VAR ,
  72. FILE_SPEC: $FSPEC .>/ ;;
  73. -- OPEN
  74. V'($$ = 'OPEN') #_KEYWORD
  75. $ID
  76. $FSPEC := #wyravenie
  77. / RETURN 'OPEN' ::<. NAME: $ID,
  78. FILE_SPEC: $FSPEC .>/ ;;
  79. -- << i <]
  80. $ID
  81. V'(($$ = '<<') OR ($$ = '<]'))
  82. $OP:= #_KEYWORD
  83. (* (( V'($$ ='@') #_KEYWORD ) ! $E!.:= #wyravenie )
  84. *)
  85. / RETURN 'PUT'::<. NAME: $ID,
  86. tip : $OP,
  87. arg: $E .>/ ;;
  88. -- CLOSE
  89. V'($$ = 'CLOSE') #_KEYWORD
  90. $ID
  91. / RETURN 'CLOSE' /
  92. ##
  93. ----------------------------------------------------