Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 29 мар 2024, 04:14

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 72 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8
Автор Сообщение
СообщениеДобавлено: 21 июн 2016, 11:58 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
Предлагаю внести небольшую поправку в модуль OPP.
В самом начале процедуры For1Extended:
Код: "OBERON"
  1. PROCEDURE For1Extended; (* Implemented by Oleg Komlev (Saferoll) *)
  2. BEGIN (* построение синтаксического дерева для FOR *)
  3. OPS.Get(sym); (* взять символ после FOR *)
  4. IF sym = ident THEN qualident(id); (* если это идентификатор, уточнить его *)
  5. IF id^.typ^.form IN intSet THEN (* он должен быть целого типа*)
  6. CheckSym(becomes); Expression(apar); pos := OPM.errpos; (* потом д б «:= А » *)

и в конце этой же процедуры:
Код: "OBERON"
  1. END; (* id # NIL*)
  2. ELSE err(68); sym := while; (* id не целый, обработаем блок как будто WHILE *)END;
  3. ELSE err(ident)
  4. END

Цель изменения - предотвратить TRAP при компиляции, если после FOR стоит идентификатор нецелого типа. Теперь после этого идентификатора будет просто вставлен маркер ошибки.
Кроме того, поскольку вместо FOR в этом случае имитируется WHILE, будет разобрано тело цикла с индикацией ошибок. Правда, при этом некорректно разбирается заголовок цикла - могут быть вставлены странные маркеры ошибок (вроде "выражение после WHILE должно быть булевского типа"). Но это происходит, только если после FOR неверный идентификатор. В любом случае это лучше, чем ТРАП.

_________________
А кроме того, я думаю, что корFORген должен быть разрушен!


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 21 июн 2016, 22:50 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Конечно, Олежек. Сделано.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 72 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club