Охота на баги
В этой задаче рассматривается простой язык программирования, который поддерживает только объявления одномерных целочисленных массивов и операторы присваивания. Ваша задача — найти ошибку в предоставленной программе.
Синтаксис языка описан с помощью BNF следующим образом:
где обозначает символ новой строки (LF).
Программа использует следующие символы: алфавитные буквы, десятичные цифры, =, [, ] и символы новой строки. Другие символы в программе отсутствуют.
Объявление массива задаёт его имя и длину. Допустимые индексы для массива длиной n — это целые числа от 0 до n−1 включительно. Обратите внимание, что имена массивов чувствительны к регистру, то есть массивы a и A считаются разными. Начальные значения элементов объявленного массива не определены.
Например, массив a длиной 10 и массив b длиной 5 объявляются так:
a[10]
b[5]
Выражение вычисляется в неотрицательное целое число. Число интерпретируется как десятичное целое. [] вычисляется в значение -го элемента массива. Присваивание назначает значение, указанное справа, элементу массива, указанному слева.
Примеры присваиваний:
a[0]=3
a[1]=0
a[2]=a[a[1]]
a[a[0]]=a[1]
Программа выполняется построчно, начиная с первой строки. Можно предположить, что массив объявляется один раз и только один раз до того, как любой из его элементов будет использован.
Вам нужно найти следующие ошибки в программе:
Недопустимый индекс массива.
Использование элемента массива, которому не было присвоено значение, в качестве индекса или значения для присваивания.
Можно предположить, что другие ошибки, такие как синтаксические, отсутствуют. Также можно предположить, что целые числа, представленные s, находятся в диапазоне от 0 до 2^31−1 (= 2147483647) включительно.
Входные данные
Входные данные состоят из нескольких наборов данных, за которыми следует строка с единственным символом '.' (точка). Каждый набор данных состоит из программы, также заканчивающейся строкой с единственным символом '.' (точка). Программа содержит не более 1000 строк. Любая строка не превышает 80 символов, исключая символ новой строки.
Выходные данные
Для каждой программы на входе укажите номер строки присваивания, в которой возникает первая ошибка. Нумерация строк начинается с 1 для каждой программы. Если в программе нет ошибок, укажите ноль. Вывод не должен содержать лишних символов, таких как пробелы.