Dynamic Declaration Language (DDL)

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

DDL은 실행 시점에 변수가 동적으로 선언되는 매우 단순한 프로그래밍 언어입니다. DDL의 모든 변수는 $-9999$부터 $9999$까지 범위의 부호 있는 정수형입니다. DDL 프로그램에는 최대 다섯 종류의 문장이 있으며, 각 문장은 별도의 프로그램 줄에 하나씩 놓이고 첫 번째 문장은 1번 줄에 있습니다.

  1. Dcl <id>
    • Dcl은 선언문을 나타내는 키워드입니다. id는 DDL 변수를 가리키는 한 글자(대소문자 구분)입니다. 예를 들어 Dcl x가 올바르게 실행되면 변수 x를 위한 메모리를 할당하고 그 값을 0으로 설정합니다.
  2. <id> = <ic>
    • 대입문입니다. id는 DDL 변수이고, ic는 $0$부터 $9999$까지 범위의 정수 상수입니다. 예를 들어 x = 2000이 올바르게 실행되면 x의 값을 2000으로 바꿉니다. = 좌우에는 하나 이상의 공백이 있을 수 있으나 탭 문자는 없습니다.
  3. Goto <label> 또는 Goto <id> <label>
    • Goto는 무조건 분기 또는 조건 분기를 나타내는 키워드입니다. label은 프로그램의 줄 번호입니다. 예를 들어 Goto 5는 실행 흐름을 5번 줄로 옮깁니다. Goto x 5가 올바르게 실행되면 $x > 0$일 때만 5번 줄로 흐름을 옮기고, 그렇지 않으면 다음 줄로 진행합니다. label은 항상 프로그램 줄 번호 범위 안에 있음이 보장됩니다.
  4. Inc <id> 또는 Dec <id>
    • IncDec는 각각 증가와 감소를 나타내는 키워드입니다. 예를 들어 Inc x가 올바르게 실행되면 x의 값에 1을 더하고, Dec yy의 값에서 1을 뺍니다.
  5. End
    • End는 종료문을 나타내는 키워드이며, 실행되면 프로그램을 멈춥니다.

DDL 언어의 키워드는 대소문자를 구분하지 않습니다.

오류 조건

프로그램 실행 중 아래의 잘못된 문장을 만나면, 오류 메시지가 출력의 별도 줄에 나타납니다. 각 오류 메시지는 <줄번호> <공백> <오류코드> 형식이며, 줄번호는 잘못된 문장의 줄 번호, 공백은 한 칸, 오류코드는 아래에 정의된 양의 정수입니다.

  1. Dcl x는, 같은 변수를 선언한 마지막 Dcl x 문장이 실행된 이후로 x가 (대입·분기·증가·감소에서) 한 번도 참조되지 않았다면 잘못된 문장입니다. 단, 이번이 실행된 첫 번째 Dcl x라면 예외입니다. 이 오류 상황에서는 재선언 오류를 나타내는 <줄번호> 1 메시지가 생성됩니다. 그런 다음 실행 흐름은 다음 줄의 문장으로 넘어가고, 이전에 올바르게 실행된 x의 선언은 그대로 유효합니다.
  2. 변수 x를 (대입·분기·증가·감소에서) 참조하는 그 밖의 모든 문장은, 그 이전에 Dcl x가 올바르게 실행된 적이 없다면 잘못된 문장입니다. 이 경우 선언되지 않은 참조를 나타내는 <줄번호> 2 메시지가 생성되고, 실행은 다음 줄부터 계속됩니다.

입력

입력의 첫 줄에는 뒤따르는 DDL 프로그램의 개수를 나타내는 정수 $N$이 주어집니다 ($1 \le N \le 20$). 각 프로그램의 첫 줄에는 그 프로그램의 문장 개수를 나타내는 정수 하나가 주어지며, 이 값은 $1$부터 $100$ 사이입니다. 프로그램(테스트 케이스) 사이에는 빈 줄이 없습니다. 각 DDL 프로그램의 문장들은 빈 줄 없이 한 줄에 하나씩 차례로 주어집니다. 문장에는 명시적인 줄 번호가 붙어 있지 않지만, 각 프로그램에서 첫 문장을 1번으로 하여 줄 순서대로 암묵적인 번호가 매겨집니다. 프로그램에는 문법 오류가 없고 반드시 종료함이 보장되며, 실행 중 오버플로나 언더플로 오류는 발생하지 않습니다. 프로그램의 각 줄에서 토큰(Goto, = 등)은 최소 한 칸 이상의 공백으로 구분됩니다. 또한 각 줄의 앞이나 뒤에 공백이 있을 수 있습니다.

출력

각 입력 DDL 프로그램에 대해, 출력의 첫 줄에는 프로그램 번호를 적고, 이어서 그 프로그램이 생성한 오류 메시지를 생성된 순서대로 한 줄에 하나씩 출력합니다. 오류 메시지 사이에는 빈 줄이 없어야 합니다. 프로그램 번호는 1부터 시작합니다.