CONSTRAINT_ERROR с "проверка индекса не удалась" - PullRequest
1 голос
/ 07 апреля 2019

Я делаю переводчик арифметических выражений в Аде.

Пример ввода: «ДОБАВИТЬ a b; ДОБАВИТЬ b c; PRN c; SUB c a; PRN c;»

У меня длинный код, поэтому я не хочу копировать все это, вместо этого я пытаюсь объяснить короткий фрагмент этого, где у меня есть ошибка.

's' - это состояние, представленное записью, с полем «Размер» и массивом, называемым выражениями. Выражение представляется записью с полями: Op (тип enum), LHS и RHS (Символы).
Функция notSpaceLinSearch находит индекс первого элемента во входной строке, который не является пробелом.

Итак, мой вопрос: почему может возникнуть ошибка и почему только в 5-й раз указатель индекса?

Спасибо за ваши ответы заранее.

while loopIndex <= numOfExpressions loop
         s.Size := s.Size + 1;
         notSpaceLinSearch(charArray, ' ', contains, notSpaceIndex);
         foundChar := charArray(notSpaceIndex);
         case foundChar is
            when 'A' => s.Expressions(s.Size).Op := ADD;
            when 'S' => s.Expressions(s.Size).Op := SUB;
            when 'M' => s.Expressions(s.Size).Op := MUL;
            when 'P' => s.Expressions(s.Size).Op := PRN;
            when 'I' => s.Expressions(s.Size).Op := INI; -- raised CONSTRAINT_ERROR .... index check failed
            when others => null;
         end case;
....
....
...
end loop;

1 Ответ

1 голос
/ 08 апреля 2019

Спасибо за ответы, проблема заключалась в неправильной инициализации массива Expressions.(N-1 вместо N).

...