자동차 트라이얼(car trialling)은 운전자가 매우 정밀하게 작성된 지시문을 그대로 따라야 하는 모터스포츠이다. 대회를 설계할 때 주최자는 방심한 참가자를 걸려들게 하려고 지시문 곳곳에 일부러 "함정"을 심어 둔다.
아래 규칙을 지키는 지시문인지 판정하는 프로그램을 작성하라. 이 규칙은 실제 자동차 트라이얼 지시문을 느슨하게 본떠 만든 것이다.
문법 표기법은 다음과 같다.
GO, KEEP, RIGHT)는 그대로 나타나야 하는 리터럴 문자열이며, 대소문자를 구분한다.|는 선택지를 구분하며, 그중 정확히 하나를 골라야 한다...는 범위를 펼친 것으로, A..D는 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
s-word와 nnn은 각각 글자와 숫자가 공백 없이 이어진 것이다. 이웃한 항목 사이에는 하나 이상의 공백이 있으나, 다음 세 경우에는 공백이 전혀 없다: 마침표(.) 바로 앞, 여는 큰따옴표(") 바로 뒤, 닫는 큰따옴표(") 바로 앞.
입력은 한 줄에 하나씩 여러 개의 지시문으로 이루어진다. 각 줄의 길이는 최대 75자이다. 입력은 문자 # 하나만 있는 줄로 끝나며, 이 줄은 지시문이 아니므로 처리하지 않는다.
각 지시문 줄마다 번호가 매겨진 줄을 하나씩 출력한다. 줄 번호는 1부터 차례로 매긴다.
각 출력 줄은 너비 3칸에 오른쪽 정렬한 줄 번호로 시작하고, 이어서 마침표(.)와 공백 한 칸을 붙인다. 그다음에는
Trap!을 출력한다.