--      analiz {ablonow RIGAL 
--
--*********************************************** 
#|l_t_posled_{ablonow 
-- (* .... *) i (* .... * DELIM ) 
        V'($ = '(*')
        #_KEYWORD 
        / $WORK_PL := #GET_WORK_PL()/ 
        $E := #PLO
        (  ( V'($$ = '*)')
             #_KEYWORD  )  !
           ( V'( $$ = '*')
             #_KEYWORD
             $D:=#prostoj_{ablon
         --    ( $D := #ATOM  ! 
         --      ($D := #_RULETOATM 
         --          /$D := 'RULENAME'::(. $D .)/)) 
             V'($$ = ')') 
             #_KEYWORD
             / $DELIM_LABEL :=#NEW_LABEL()/ 
           )) 
        / LAST #programma $tek_PL :=
              LAST #programma $tek_PL - 1;
          RETURN 'STARLIST':: <. WORK_PL: $WORK_PL, 
                                 LABEL: #NEW_LABEL(), 
                                 BODY: $E,
                                 DELIM_LABEL: 
                                           $DELIM_LABEL,
                                 DELIMITER: $D .>/ ;; 

-- (+ .... +) i (+ .... + DELIM ) 
        V'($$ = '(+') 
        #_KEYWORD 
        / $WORK_PL := #GET_WORK_PL(); 
          $FLAG := #GET_FLAG() /
        $E := #PLO
        ( ( V'( $$ = '+)')
            #_KEYWORD   )  !
           ( V'($$ = '+') 
             #_KEYWORD
             $D:=#prostoj_{ablon
   --           ( $D := #ATOM  !
    --              ($D := #_RULETOATM
    --               /$D := 'RULENAME'::(. $D .)/)) 
             V'($$ = ')') 
             #_KEYWORD
             / $DELIM_LABEL := #NEW_LABEL()/
           )) 
        / LAST #programma $tek_PL :=
              LAST #programma $tek_PL - 1;
          LAST #programma $tek_FLAG :=
              LAST #programma $tek_FLAG - 1;
          RETURN 'PLUSLIST':: <. WORK_PL: $WORK_PL, 
                                 LABEL: #NEW_LABEL(), 
                                 FLAG: $FLAG, 
                                 BODY: $E,
                                 DELIM_LABEL: 
                                          $DELIM_LABEL, 
                                 DELIMITER: $D .>/ ;; 

-- [ ... ]
        V'($$ = '[' ) 
        #_KEYWORD 
          / $WORK_PL:=#GET_WORK_PL()/ 
        $E := #PLO
        V'($$ = ']' ) 
        #_KEYWORD 
        / LAST #programma $tek_PL:= 
            LAST #programma $tek_PL -1; 
          RETURN 'FACULT':: <. LABEL: #NEW_LABEL(), 
                               WORK_PL: $WORK_PL, 
                               BODY:  $E .>/ ;; 

-- ( ... ! ... ! ... )
        V'($$ = '(')
        #_KEYWORD 
        /$WORK_PL:=#GET_WORK_PL()/
        (* $D := #PLO 
           / $E!. := (. #NEW_LABEL() .) !! $D/
         * #ALTERNATIVE_SYMBOL )
        V'( $$ = ')') 
        #_KEYWORD 
        /  $metka_uspeha:=  #NEW_LABEL();
        LAST #programma $tek_PL:=
             LAST #programma $tek_PL-1;  
       
        RETURN ALTERNATIVE:: <. metka_uspeha:
                                        $metka_uspeha,
                                WORK_PL:$WORK_PL,   
                                BODY: $E .>
                                / ;;

-- {ablon 
        $E := #{ablon /RETURN $E/ 
##
----------------------------------------------------- 
#ALTERNATIVE_SYMBOL 
        V'($$ = '!')
        #_KEYWORD 
##
----------------------------------------------------- 
#{ablon 
        [ $V := #_VARNTOATM 
          / #TAB(LAST #programma $tek_prawilo 
                $V ) /
          $ASS_SYMBOL := #ASS_SYMBOL  ] 

        $P := #prostoj_{ablon 
        / IF $ASS_SYMBOL -> 
            IF $ASS_SYMBOL<>':=' ->
               #ADD_USEVAR($V); FI;
            -- SUCH VARIABLES MUST BE INITIALISED IN BEGINNING OF BRANCH
            -- OPTIMIZED 22.8.90

               RETURN $ASS_SYMBOL:: 
                                <. VAR: VAR:: 
                                        <. NAME: $V.>,
                                   PAT: $P .> 
          ELSIF T -> RETURN $P FI / 
##
------------------------------------------------------
#ASS_SYMBOL 
       $A := #_KEYWORD
       /IF $A = ':=' -> RETURN $A FI/ 

       ( V'($A = '+')   ! 
         V'( $A = '++') ! 
         V'( $A = '!.') ! 
         V'( $A = '!!') ) 
       V'( $$ = ':=')  #_KEYWORD
        / RETURN #IMPLODE ( $A ':=' ) / 
##
------------------------------------------------------- 
