Я делаю переводчик арифметических выражений в Аде.
Пример ввода: «ДОБАВИТЬ 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;