我正在用Ada做一个算术表达式解释器。
示例输入:“ ADD a b; ADD b c; PRN c; SUB c a; PRN c;”
我的代码很长,所以我不想复制所有代码,而是尝试解释其中的一小段错误。
的状态是一种状态,由一条记录表示,具有字段“大小”和一个称为表达式的数组。表达式由记录表示,其字段为:Op(枚举类型),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;
答案 0 :(得分:1)
感谢您的回答,问题是Expressions数组的错误初始化。 (用N-1代替N)。