Car trialling requires the following of carefully worded instructions. When setting a trial, the organiser places traps in the instructions to catch out the unwary.
Write a program to determine whether an instruction obeys the following rules, which are loosely based on real car trialling instructions. BOLD-TEXT indicates text as it appears in the instruction (case sensitive), separates options of which exactly one must be chosen, and .. expands, so A..D is equivalent to A B C D .
instruction = navigational time-keeping navigational AND time-keeping
navigational = directional navigational AND THEN directional
directional = how direction how direction where
how = GO GO when KEEP
direction = RIGHT LEFT
when = FIRST SECOND THIRD
where = AT sign
sign = "signwords"
signwords = s-word signwords s-word
s-word = letter s-word letter
letter = A..Z .
time-keeping = record change
record = RECORD TIME
change = cas TO nnn KMH
cas = CHANGE AVERAGE SPEED CAS
nnn = digit nnn digit
digit = 0..9 Note that s-word and nnn are sequences of letters and digits respectively, with no intervening spaces. There will be one or more spaces between items except before a period (.), after the opening speech marks or before the closing speech marks.
Each input line will consist of not more than 75 characters. The input will be terminated by a line consisting of a single #.
The output will consist of a series of sequentially numbered lines, either containing the valid instruction, or the text Trap! if the line did not obey the rules. The line number will be right justified in a field of 3 characters, followed by a full-stop, a single space, and the instruction, with sequences of more than one space reduced to single spaces.