mario@108: (* Test whether the keyword XXXX may be used as an identifier for:
mario@108:  * STEP, ACTION and TRANSITION name/identifier
mario@108:  *
mario@108:  * The XXXX names in the following code are merely a placeholder.
mario@108:  * They will be replaced by several identifiers before actual testing
mario@108:  * of the compiler.
mario@108:  *)
mario@108: 
mario@108: (* The identifiers that will replace the XXXX
mario@108:  * must be placed on a line starting with #
mario@108:  * All identifiers preceded by # are ignored!
mario@108:  * The identifier list must be placed inside an IEC 61131-3 comment.
mario@108:  *)
mario@108: (*
mario@108: #IL_operators ANDN CAL CALC CALCN CD CLK CU IN JMP JMPC JMPCN 
mario@108: #IL_operators LD LDN ORN PT PV R R1 RET RETC RETCN S S1 ST STN XORN
mario@108: #SFC_qualifiers D DS L N P #R #S SD SL
mario@108:      NOTE: R and S are identical to IL operators!!
mario@108: #Task_initialisers PRIORITY SINGLE INTERVAL
mario@108: *)
mario@108: 
mario@108: 
mario@108: 
mario@108: (* Use of XXXX as a STEP identifier *)
mario@108: 
mario@108: PROGRAM bar01
mario@108:   VAR
mario@108:     IX1 AT %IX1 : BOOL;
mario@108:     IX2 AT %IX2 : BOOL;
mario@108:     IX3 AT %IX3 : BOOL;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP XXXX:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP2:
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM XXXX TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION FROM STEP1 TO XXXX
mario@108:     := IX1 = TRUE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION (PRIORITY := 4) FROM XXXX TO STEP2
mario@108:     := IX2 = TRUE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION (PRIORITY := 4) FROM STEP2 TO XXXX
mario@108:     := IX2 = TRUE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION transition_id1 FROM STEP2 TO XXXX
mario@108:     := IX1 = FALSE AND IX3 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION transition_id2 FROM XXXX TO STEP2
mario@108:     := IX1 = FALSE AND IX3 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION transition_id3 (PRIORITY := 3) FROM XXXX TO STEP2
mario@108:     := IX3 = TRUE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION transition_id4 (PRIORITY := 5) FROM STEP2 TO XXXX
mario@108:     := IX3 = TRUE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION FROM (XXXX, STEP2) TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION FROM (STEP2, XXXX) TO STEP1
mario@108:     := IX2 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION FROM STEP1 TO (XXXX, STEP2)
mario@108:     := IX1 = TRUE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION FROM STEP1 TO (STEP2, XXXX)
mario@108:     := IX2 = TRUE;
mario@108:   END_TRANSITION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: (* Use of XXXX as a TRANSITION identifier *)
mario@108: 
mario@108: PROGRAM bar02
mario@108:   VAR
mario@108:     IX1 AT %IX1 : BOOL;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION XXXX FROM GO TO STEP1
mario@108:     := IX1 = FALSE AND IX3 = FALSE;
mario@108:   END_TRANSITION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar03
mario@108:   VAR
mario@108:     IX1 AT %IX1 : BOOL;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION XXXX (PRIORITY := 3) FROM GO TO STEP1
mario@108:     := IX3 = TRUE;
mario@108:   END_TRANSITION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: (* Use of XXXX as an ACTION identifier *)
mario@108: 
mario@108: 
mario@108: PROGRAM bar20
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108:   STEP STEP1:
mario@108:     XXXX ();
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar21
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     XXXX(N);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar22
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     XXXX(P);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar23
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     XXXX(R);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar24
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     XXXX(S);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar25
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     XXXX(D, T#1s);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar26
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     XXXX(L, T#1s);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar27
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     XXXX(DS, T#1s);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar28
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     XXXX(SD, T#1s);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar29
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     XXXX(SL, T#1s);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar30
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     XXXX(L, delta_1);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar31
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     XXXX(L, delta_1, IX1, QX1);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: PROGRAM bar32
mario@108:   VAR
mario@108:     QX1 : BOOL := 1;
mario@108:     QX2 : BOOL := 0;
mario@108:     QX3 : BOOL;
mario@108:     IX1 : BOOL;
mario@108:     IX2 : BOOL;
mario@108:     IX3 : BOOL;
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP1:
mario@108:     INLINE1 (); 
mario@108:     XXXX(L, delta_1, IX1, QX1);
mario@108:     INLINE2 (); 
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP2:
mario@108:     XXXX(L, delta_1, IX1, QX1);
mario@108:     INLINE1 (); 
mario@108:     INLINE2 (); 
mario@108:   END_STEP
mario@108: 
mario@108:   STEP STEP3:
mario@108:     INLINE1 (); 
mario@108:     INLINE2 (); 
mario@108:     XXXX(L, delta_1, IX1, QX1);
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   ACTION XXXX:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: 
mario@108:   ACTION INLINE1:
mario@108:     IX1 := TRUE;
mario@108:   END_ACTION
mario@108: 
mario@108:   ACTION INLINE2:
mario@108:     IX1 := TRUE;
mario@108:   END_ACTION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: (* Checking whether the use of XXXX will confuse any other
mario@108:  * normal and correct IL or ST code.
mario@108:  *)
mario@108: {#include "basic_code.test" }
mario@108: