DDL은 실행 시점에 변수가 동적으로 선언되는 매우 단순한 프로그래밍 언어입니다. DDL의 모든 변수는 $-9999$부터 $9999$까지 범위의 부호 있는 정수형입니다. DDL 프로그램에는 최대 다섯 종류의 문장이 있으며, 각 문장은 별도의 프로그램 줄에 하나씩 놓이고 첫 번째 문장은 1번 줄에 있습니다.
Dcl <id>
Dcl은 선언문을 나타내는 키워드입니다. id는 DDL 변수를 가리키는 한 글자(대소문자 구분)입니다. 예를 들어 Dcl x가 올바르게 실행되면 변수 x를 위한 메모리를 할당하고 그 값을 0으로 설정합니다.<id> = <ic>
id는 DDL 변수이고, ic는 $0$부터 $9999$까지 범위의 정수 상수입니다. 예를 들어 x = 2000이 올바르게 실행되면 x의 값을 2000으로 바꿉니다. = 좌우에는 하나 이상의 공백이 있을 수 있으나 탭 문자는 없습니다.Goto <label> 또는 Goto <id> <label>
Goto는 무조건 분기 또는 조건 분기를 나타내는 키워드입니다. label은 프로그램의 줄 번호입니다. 예를 들어 Goto 5는 실행 흐름을 5번 줄로 옮깁니다. Goto x 5가 올바르게 실행되면 $x > 0$일 때만 5번 줄로 흐름을 옮기고, 그렇지 않으면 다음 줄로 진행합니다. label은 항상 프로그램 줄 번호 범위 안에 있음이 보장됩니다.Inc <id> 또는 Dec <id>
Inc와 Dec는 각각 증가와 감소를 나타내는 키워드입니다. 예를 들어 Inc x가 올바르게 실행되면 x의 값에 1을 더하고, Dec y는 y의 값에서 1을 뺍니다.End
End는 종료문을 나타내는 키워드이며, 실행되면 프로그램을 멈춥니다.DDL 언어의 키워드는 대소문자를 구분하지 않습니다.
오류 조건
프로그램 실행 중 아래의 잘못된 문장을 만나면, 오류 메시지가 출력의 별도 줄에 나타납니다. 각 오류 메시지는 <줄번호> <공백> <오류코드> 형식이며, 줄번호는 잘못된 문장의 줄 번호, 공백은 한 칸, 오류코드는 아래에 정의된 양의 정수입니다.
Dcl x는, 같은 변수를 선언한 마지막 Dcl x 문장이 실행된 이후로 x가 (대입·분기·증가·감소에서) 한 번도 참조되지 않았다면 잘못된 문장입니다. 단, 이번이 실행된 첫 번째 Dcl x라면 예외입니다. 이 오류 상황에서는 재선언 오류를 나타내는 <줄번호> 1 메시지가 생성됩니다. 그런 다음 실행 흐름은 다음 줄의 문장으로 넘어가고, 이전에 올바르게 실행된 x의 선언은 그대로 유효합니다.x를 (대입·분기·증가·감소에서) 참조하는 그 밖의 모든 문장은, 그 이전에 Dcl x가 올바르게 실행된 적이 없다면 잘못된 문장입니다. 이 경우 선언되지 않은 참조를 나타내는 <줄번호> 2 메시지가 생성되고, 실행은 다음 줄부터 계속됩니다.입력의 첫 줄에는 뒤따르는 DDL 프로그램의 개수를 나타내는 정수 $N$이 주어집니다 ($1 \le N \le 20$). 각 프로그램의 첫 줄에는 그 프로그램의 문장 개수를 나타내는 정수 하나가 주어지며, 이 값은 $1$부터 $100$ 사이입니다. 프로그램(테스트 케이스) 사이에는 빈 줄이 없습니다. 각 DDL 프로그램의 문장들은 빈 줄 없이 한 줄에 하나씩 차례로 주어집니다. 문장에는 명시적인 줄 번호가 붙어 있지 않지만, 각 프로그램에서 첫 문장을 1번으로 하여 줄 순서대로 암묵적인 번호가 매겨집니다. 프로그램에는 문법 오류가 없고 반드시 종료함이 보장되며, 실행 중 오버플로나 언더플로 오류는 발생하지 않습니다. 프로그램의 각 줄에서 토큰(Goto, = 등)은 최소 한 칸 이상의 공백으로 구분됩니다. 또한 각 줄의 앞이나 뒤에 공백이 있을 수 있습니다.
각 입력 DDL 프로그램에 대해, 출력의 첫 줄에는 프로그램 번호를 적고, 이어서 그 프로그램이 생성한 오류 메시지를 생성된 순서대로 한 줄에 하나씩 출력합니다. 오류 메시지 사이에는 빈 줄이 없어야 합니다. 프로그램 번호는 1부터 시작합니다.