Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2011, 09:34   #1
ALıya
Новичок
Джуниор
 
Регистрация: 02.11.2011
Сообщений: 2
По умолчанию анализ описания переменных

Подскажите, в чем проблема. Программа читает файл, и должна полностью проанализировав его, выдать сообщение о корректности или о ошибке. Процедуры анализа строк работают корректно. Но при изменении исходного файла программа иногда начинает зависать. Что то упущено, но не могу разобраться. Может кто посмотрит..Буду благодарна.

В исходном файле к примеру:
var a, b, c: real;
d: array [1..6,6..9] of integer;
s1: string;
s2: string[10];

Сама программа во вложении.
Вложения
Тип файла: txt программа.txt (6.1 Кб, 159 просмотров)
ALıya вне форума Ответить с цитированием
Старый 02.11.2011, 10:50   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Код:
процедуры проверок данных в файле}
procedure masanalyz;
var
   kol: integer;
   p1, p2, find: boolean;
begin
......
     while st[i] <>'' do
в одной из последуюших многочисленных проверок пропущен оператор Inc(i) получаем бесконечный цикл (зависание).
должно быть
Код:
if ... then begin
  Inc(i);
end
else begin
  Inc(i);
end;
ОДин из этих Inc(i) у вас отсутствует. Они могут быть во вложенных блоках
Код:
if ... then begin
  if .... then begin
      Inc(i);
  end
  else begin
      Inc(i);
   end;
но в таком случае прохождение любой ветки должно приводить к Inc(i).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 02.11.2011 в 10:54.
evg_m вне форума Ответить с цитированием
Старый 02.11.2011, 13:48   #3
ALıya
Новичок
Джуниор
 
Регистрация: 02.11.2011
Сообщений: 2
По умолчанию

Спасибо большое,буду разбираться..
ALıya вне форума Ответить с цитированием
Старый 02.11.2011, 21:43   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

У тебя главная беда в процедуре strokanalyz. Посмотри внимательно, что происходит в главном цикле, если в нее попадает строчка
[quote]s2:string[10];[/quote
например.

Первый вызов extract забирает лексему s2, потом вручную обрабатывается двоеточие, потом опять вызов extract забирает слово string, а вот квадратную скобку уже обрабатывать некому. И цикл будет крутиться до бесконечности - вызов extract(0) будет возвращать пустую строку, а до вызова extract(1) выполнение не доберется, потому что не будет слова array. И так зацикливаться оно будет при попадании на любую непредусмотренную лексему - я могу придумать много способов повесить эту функцию

Вообще я бы советовал переписать весь код более логически структурировано, отделить лексический разбор от семантическогО etc, иначе ты замучаешься это отлаживать.

Да, и не стОит так сурово пользоваться глобальными переменными )
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание меню для описания руководства пользователя Человек Панда Помощь студентам 2 15.07.2011 00:34
описания алгоритма! Patriot_14 Помощь студентам 8 15.06.2011 23:32
Пример описания класса окружности на С# Kira444 Помощь студентам 1 13.01.2011 00:20
формат описания файлового типа turbotrb Помощь студентам 1 17.09.2010 19:43
ОПЕРЕЖАЮЩИЕ ОПИСАНИЯ ПРОЦЕДУР DRAgon™ Паскаль, Turbo Pascal, PascalABC.NET 13 11.06.2010 21:24