    : #(a:ARRAYDEF 
    | #(ARRAYEXPR
    : #(ARRAYEXPR 
    : #(ARRAYEXPR 
    : #(ARRAYEXPR res=l_indexable_expr aL=arrayindex_list { guard.reset(aL);})   
    : #(ARRAYEXPR rP=l_indexable_expr aL=arrayindex_list { guard.reset(aL);})   
    : #(ARRAYEXPR r=r_dot_indexable_expr[ aD] 
	: #(ARRAYEXPR tag_expr[ aD] aL=arrayindex_list { aD->AddIx(aL);} )
    | #(ASSIGN 
    : #(ASSIGN 
    : #(ASSIGN 
      #(ASSIGN // can it occur at all?
    | #(ASSIGN //???e1=expr
    | #(ASSIGN_REPLACE 
    | #(ASSIGN_REPLACE 
    | #(ASSIGN_REPLACE 
    | #(ASSIGN_REPLACE 
    | #(ASSIGN_REPLACE //???e1=expr
        #(ax:ARRAYIX
	: #(ax:ARRAYIX
	: #(BLOCK (retCode=statement_list)?)
	: #(c:CASE e=expr
    : #(DEC l=l_decinc_expr[ DECSTATEMENT])
    |	#(DEC res=l_decinc_expr[ DEC])
    : #(DEREF e1=expr 
    | #(DOT 
    : #(dot:DOT 
    : #(dot:DOT 
    | #(dot:DOT  // struct assignment
    : #(EXPR e=expr
    : #(EXPR res=expr { aD->SetOwner( true);}) // ({tag:0}).tag should work 
    : #(EXPR res=l_expr[ NULL]) // for l_dot_array_expr
        | #(FCALL f:IDENTIFIER
        | #(FCALL f:IDENTIFIER
	: #(FCALL_LIB fl:IDENTIFIER
	: #(FCALL_LIB fl:IDENTIFIER
	: #(FCALL_LIB_RETNEW fl:IDENTIFIER
    : #(f:FOR // (VAR|VARPTR) expr expr 
    | #(fs:FOR_STEP // (VAR|VARPTR) expr expr expr 
	: #(i:IF e=expr
	: #(i:IF_ELSE e=expr
    | #(INC l=l_decinc_expr[ INCSTATEMENT])
    |	#(INC res=l_decinc_expr[ INC])
        | #(KEYDEF kname:IDENTIFIER kval=expr
        | #(KEYDEF_REF_CHECK knameCk:IDENTIFIER 
        | #(KEYDEF_REF_EXPR knameE:IDENTIFIER 
    : (  #(KEYDEF_REF knameR:IDENTIFIER kvalRef=ref_parameter
        ( #(MFCALL 
        ( #(MFCALL 
        | #(MFCALL_PARENT 
        | #(MFCALL_PARENT 
        ( #(MPCALL 
        | #(MPCALL_PARENT 
	: #(n:NSTRUC id:IDENTIFIER 
	| #(NSTRUC_REF idRef:IDENTIFIER 
	: #(PCALL_LIB pl:IDENTIFIER
        | #(PCALL p:IDENTIFIER
    |	#(POSTDEC res=l_decinc_expr[ POSTDEC])
    |	#(POSTINC res=l_decinc_expr[ POSTINC])
	| #(q:QUESTION 
	: #(q:QUESTION 
    | #(QUESTION e1=expr
    : #(QUESTION e1=expr
    : #(QUESTION e1=expr
        | #(REF_CHECK
        | #(REF_EXPR 
        | #(REF pvalRef=ref_parameter
    | #(RETF ( { !static_cast<EnvUDT*>(callStack.back())->LFun()}? e=expr // expr -> r value
	: #(r:REPEAT // block expr
	: #(s:SWITCH e=expr 
	: #(STRUC 
	: #(w:WHILE // statement expr 
