1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Новые вопросы - какая функция определяет наличие или отсутствие утечек памяти? Я скачал ВинАДУ, поставил, как подключить пакет, содержащий заголовки виндовых библиотек? with ADA.Windows не рабтает, нет такого пакета.
По поводу самой функции Do_Tree возражений нету, кстати?
Я бы немного "разгрузил" функцию от множества if/end if. То есть, вынес бы выброс исключений в отдельные функции (там всего два вида выбрасывается, так что всего 2 доп. функции - Check_IA и Check_BB), по проверке условия. Один фиг, когда ты получаешь исключение - получаешь и Call stack traceback locations, которые можно преобразовать в названия процедур:
Ну, и вот так я б не написал:
Цитата
while Was_Token loop -- пока у нового оператора приоритет выше, чем у текущего case Last_Token.Kind is when Operator => if Less(KP, To_Pair(Last_Token), Last_Token.Right_Associated) then High_Level := True; -- повышаем уровень Do_Tree(T, To_Pair(Last_Token)); else exit; end if; when Close_Bracket | Delimiter => exit; when others => Position.all := Old_Position; Was_Token := False; return; end case; end loop;
, лишние if/else, я б сделал так:
while Was_Token loop -- пока у нового оператора приоритет выше, чем у текущего case Last_Token.Kind is when Operator => exit when not Less(KP, To_Pair(Last_Token), Last_Token.Right_Associated); High_Level := True; -- повышаем уровень Do_Tree(T, To_Pair(Last_Token)); when Close_Bracket | Delimiter => exit; when others => Position.all := Old_Position; Was_Token := False; return; end case; end loop;