Correctly identify errors when parsing erroneous code (make sure flex goes back to INITIAL state when code contains errors that do not allow determining whether ST or IL is being parsed)
FUNCTION WEIGH : WORD (* BCD encoded *)
VAR_INPUT (* "EN" input is used to indicate "scale ready" *)
weigh_command : BOOL;
gross_weight : WORD ; (* BCD encoded *)
tare_weight : INT ;
END_VAR
(* Function Body *)
LD weigh_command
JMPC WEIGH_NOW
ST ENO (* No weighing, 0 to "ENO" *)
RET
WEIGH_NOW: LD gross_weight
BCD_TO_INT
SUB tare_weight
INT_TO_BCD (* Return evaluated weight *)
ST WEIGH
END_FUNCTION (* Implicit "ENO" *)