OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 18:39

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




Начать новую тему Ответить на тему  [ Сообщений: 135 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
СообщениеДобавлено: Суббота, 18 Июль, 2009 01:14 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
Не... эт понятно то все, я про аналог в Delphi.
Я сделал пока типа вот так
vSET = 0..255;
sSet = SET OF vSET;

Но это на скорую руку, что бы проверить компилер, потом конечно надо переделывать...

Ну и ишо вопрос ASH какой аналог (смутно догадываюсь про SHL, SHR)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 18 Июль, 2009 09:41 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
sa_t_an писал(а):
Не... эт понятно то все, я про аналог в Delphi.
Я сделал пока типа вот так
vSET = 0..255;
sSet = SET OF vSET;

Но это на скорую руку, что бы проверить компилер, потом конечно надо переделывать...

Ну и ишо вопрос ASH какой аналог (смутно догадываюсь про SHL, SHR)

Только в Обероне диапазон 0..31 (так как это биты длинного целого).
Для твоего варианта не знаю (так как мне не известно внутреннее представление множества у Дельфей), а вот для моего варианта (см выше):
Код:
PROCEDURE ASH (VAR set : SET; bit : INTEGER);
BEGIN
    IF bit < 0 THEN set := set SHR ABS(bit) ELSE set := set SHL bit;
END;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 00:01 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
Так... О новостях... Ну вроде Фронт-энд замутил...

Теперь будущий компилер проверяет код на предмет ошибок и распихивает его по структурам...
Пока ещё не прикручивал импорт, а так любой исходник можно проверить на корректность.
После завершения кодогенератора (этим уже занимаются) скорее всего будет компилятор Оберона 2.

Инструкция для компилирования среды:

Качаем Delphi 10 Lite (75 Mb)
У кого установлена TurboDelphi танцы не нужны...
Delphi 7 и ниже не подойдет.
Устанавливаем (30 Мб)
В архиве есть папка Supplemental
Из этой папки устанавливаем компоненты менеджеры (.......Action......exe,не помню точное название)
Во вкладке Additional должны появиться TActionManager,TActionToolBar и т.д
Если кто то все таки прирос к Delphi 7 (все же луче клинических случаев с Turbo Pascal) придется использовать
контролы замену TActionToolBar->TToolBar и т.д
Компилим...

(ЗЫ... Интерфейс Delphi 10 можно перенастроить на старый как в 7-й версии!)

Что реализовано в среде (но необходима доводка надфилями)
1. Подсветка кода и кодефолдинг
2. Секции, сворачивание разворачивание (CTRL+F5) и все как в делфях, табуляция CTRL+SHIFT+I(U) и т.д.
3. Загрузка(сохранение) Unicode
4. Полноценный ассемблер генерирующий PE файл(примеры есть)
5. Полноценный компилятор ресурсов (аналог BRCC32.exe, пример есть- необходима доработочка парсера)
6. Фронт-энд Оберон 2 (ERROR.MOD,OPB.MOD,OPS.MOD,OPP.MOD,OPT.MOD,OPM.MOD)...

Папки исходников

ctrl - Визуальные и невизуальные контролы
forms- Формы
unit
--Assembler - Компилятор Ассемблера
--Resource - Компилятор ресурсов
--Oberon - Компилятор Оберона
--Highlight - Подсветка кода
----AsmHighlght.pas
----ObrHighlght.pas

Остальные папки служебные (картинки, ресурсы и т.д)

Запуск компиляторов в MainForm функция

procedure TMainIDEFormSHS.Compiles(const Fl: boolean);

Для тех кто хочет выдрать отдельные исходники (например для консоли) просто копируем папку с компилятором в другой проект, берем функцию вызова из вышеуказанной процедуры и заменяем в функции

procedure WriteConsole(S: String;H: Byte);
begin
DebugFrm.AddMsg(S,H);<-- Вот эту строку на свою строку вывода (например WriteLn(S))
end;

Переменная H - это картинка в окне сообщений

HINT_DANGER = 0;
HINT_INFO = 1;
HINT_OK = 2;
HINT_WARNING = 3;
HINT_LINE = 4;
HINT_POINT = 5;


Последний раз редактировалось sa_t_an Понедельник, 20 Июль, 2009 00:28, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 00:25 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Madzi писал(а):
Для твоего варианта не знаю (так как мне не известно внутреннее представление множества у Дельфей), а вот для моего варианта (см выше):
Madzi, в Оберонах ASH применяется к целым, но не к множествам...
sa_t_an писал(а):
Ну и ишо вопрос ASH какой аналог (смутно догадываюсь про SHL, SHR)
Ариф-й/лог-й сдвиги влево одинаковые, а вправо разные. Ариф-й заполняет (слева) знаковым битом, логич-й - нулями. Что соот-т делению на 2^? знакового/беззнакового целого.
Сообщение о языке Компонентный Паскаль писал(а):
ASH(x, y) x: <= INTEGER INTEGER арифметический сдвиг (x * 2^y)
x: LONGINT LONGINT
y: целый тип
Delphi 7 Language Reference. Logical (bitwise) operators писал(а):
The operations x shl y and x shr y shift the value of x to the left or right by y bits, which (if x is an unsigned integer) is equivalent to multiplying or dividing x by 2^y; the result is of the same type as x. For example, if N stores the value 01101 (decimal 13), then N shl 1 returns 11010 (decimal 26). Note that the value of y is interpreted modulo the size of the type of x. Thus for example, if x is an integer, x shl 40 is interpreted as x shl 8 because an integer is 32 bits and 40 mod 32 is 8.
ASH выполняет арифметический сдвиг влево/вправо в зависимости от знака y. shl/shr выполняют логический сдвиг влево/вправо. Т.е. на делфи аналог ASH нужно делать ассемблерной процедурой.

P.S. Решил на всякий случай проверить.. На Delphi7 - увидел интересную картину. При выполнении операции shr над переменными вып-ся логический сдвиг, а при выполнении над константами (когда ком-р сам считает) - арифметический.
Код:
var   x, y, z: integer;
begin
   x := -5;
  y := x shr 2;  // y = 1073741822
  z := -5 shr 2; // z = -2
...
Вот такая вот загогулина...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 00:31 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
Глюки в 7-ой версии уже исправлены (качаем D10)

y - 1073741822
z - 1073741822

:D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 04:35 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
GUEST Дружище подсказывай где мне в исходнике на C++ найти и подсмотреть функции
FARPROC err,
FARPROC msg,
FARPROC dep,long opt,
FARPROC firstProc,
FARPROC nextProc,
FARPROC openProc,
FARPROC readProc,
FARPROC closeProc

Т.М. тока что вкурил как работает DLL... Мля, у мэтров ваще стеб идет по всему коду...
Ы... Ладно хоть разобрался в основах Оберона...

MaxRealPat = 7F7FFFFFH; (* most positive, 32-bit pattern *)
MaxLRealPatL = -1; (*0FFFFFFFFH*) (* most positive, lower 32-bit pattern *)
MaxLRealPatH = 7FEFFFFFH;

Кто знаит какому типу это относится? REAL и LONGREAL???

И ешо дурацкий вопрос, а как мен передать тип в функцию паскаля?
Типа сделать аналог MIN(LONGINT);


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 04:52 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Здравствуй sat.
Делай поиск по функции CompileFile, она их использует так и найдешь. Успехов.

Код:
/***************************************************************************
 *                                                                         *
 *  FUNCTION   : CompileFile (HWND)                                        *
 *                                                                         *
 *  PURPOSE    : Compiles a file and shows errors in a window.             *
 *                                                                         *
 ***************************************************************************/

void FAR CompileFile (HWND hwnd)
и т.д.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 05:23 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
GUEST писал(а):
Здравствуй sat.
Делай поиск по функции CompileFile, она их использует так и найдешь. Успехов.


Дыг в делфях я просто тыкаю Ctrl+слово мышкой и все, а тут как выполнить поиск по функции? Куда лезь то?
У меня Express... Иль подскажи файло де искать?

C MIN MAX разобрался, теперь над аналог SHORT, т.е. что оно воще делает? В смысле я понимаю что это приведение типа, но SHORT(SHORT()) - вводит меня в депрессию...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 10:51 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
Евгений Темиргалеев писал(а):
Madzi писал(а):
Для твоего варианта не знаю (так как мне не известно внутреннее представление множества у Дельфей), а вот для моего варианта (см выше):
Madzi, в Оберонах ASH применяется к целым, но не к множествам...

Я это знаю. но по сути множество в обероне - это 32 битное беззнаковое целое, для которого эффективно реализованы битовые операции.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 10:56 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
sa_t_an писал(а):
MaxRealPat = 7F7FFFFFH; (* most positive, 32-bit pattern *)
MaxLRealPatL = -1; (*0FFFFFFFFH*) (* most positive, lower 32-bit pattern *)
MaxLRealPatH = 7FEFFFFFH;

Кто знаит какому типу это относится? REAL и LONGREAL???

MaxRealPat = это маска для REAL
MaxLRealPatL = это младшее слово (32бита) для LONGREAL
MaxLRealPatH = это старшее слово (32бита) для LONGREAL
Там они ещё в секции инициализации переопределяются.

sa_t_an писал(а):
И ешо дурацкий вопрос, а как мен передать тип в функцию паскаля?
Типа сделать аналог MIN(LONGINT);

MAX (LONGINT) = System.MaxLongint;
MIN (LONGINT) = -System.MaxLongint;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 10:59 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 575
Откуда: Россия, Санкт-Петербург
sa_t_an писал(а):
GUEST писал(а):
Здравствуй sat.
Делай поиск по функции CompileFile, она их использует так и найдешь. Успехов.


Дыг в делфях я просто тыкаю Ctrl+слово мышкой и все, а тут как выполнить поиск по функции? Куда лезь то?
У меня Express... Иль подскажи файло де искать?

C MIN MAX разобрался, теперь над аналог SHORT, т.е. что оно воще делает? В смысле я понимаю что это приведение типа, но SHORT(SHORT()) - вводит меня в депрессию...

SHORT позволяет преобразовать знаковое целое к знаковому целому, но с меньшей разрядностью:
L : LONGINT;
I : INTEGER;
S : SHORTINT;

S = SHORT (I) = SHORT (SHORT (L))
Аналогично с LONG
L = LONG (I) = LONG (LONG (S))


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 11:40 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Madzi писал(а):
MIN (LONGINT) = -System.MaxLongint;

Может так?
Код:
-System.MaxLongint - 1


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 12:03 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Valery Solovey писал(а):
Может так?
Код:
-System.MaxLongint - 1
Тогда ещё лучше так:
Код:
-(System.MaxLongint - 1)
а то ещё возникнет переполнение...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 12:32 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
А вот и нет. Получится не одно и то же : ).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 12:33 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Madzi писал(а):
Евгений Темиргалеев писал(а):
Madzi, в Оберонах ASH применяется к целым, но не к множествам...
Я это знаю. но по сути множество в обероне - это 32 битное беззнаковое целое, для которого эффективно реализованы битовые операции.
Да, так. Но это не повод применять к множествам все побитовые операции... Расскажите, пожалуйста, какую операцию над множествами Вы реализуете логическим сдвигом?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 20 Июль, 2009 13:09 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Valery Solovey писал(а):
А вот и нет. Получится не одно и то же : ).

А, ну да, по абсолютному значению макс. отрицательноей целое больше макс. положительного... :oops:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 00:00 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
Наблудение реализации компилятора...

По поводу Expression... Я бы к стати выкинул обобщенный рекурсивный спуск и воткнул бы генератор ОПЗ сразу убивая два зайца.

1. Н - оптимизацию
2. Размер сократился бы до 30 строк и объеденил бы в себе ConstantExpression и просто Expression

................................

В добавок... Жельтмены!!! Я оговаривался как то о том что я перевожу ОБЕРОН на PASCAL, поэтому как что то сделать на обероне я в курсе, может быть даже очень в курсе... Посты и вопросы я подкидываю для помощи в аналогах функций. Оно как в ОБЕРОНЕ уже есть SHORT а в PASCAL(Delphi) нету, так вот все вопросы связываются к тому, что бы при встрече строки ОБЕРОНА
SHORT(X)
Я мог написать функцию PASCAL делующую аналогичную операцию...

Вроде того как я реализовал встроеные функции MIN и MAX

Код:
FUNCTION MAX(T:TTYPES): LONGINT;
BEGIN
  RESULT:= 0;
  CASE T OF
    _SETS     : RESULT:= MaxSet;
    _SHORTINTS: RESULT:= MaxSInt;
    _INTEGERS : RESULT:= MaxInt;
    _LONGINTS : RESULT:= MaxLInt;
    _REALS    : RESULT:= MaxRealPat;
    _LONGREALS: RESULT:= MaxLRealPatH; //MaxLRealPatL = -1;
  END;
END;


И еще в проект потом придется добавлять интерпретатор оберона для эмуляции работы контролов... Но это я так думаю мелочи :D

Далее... Модуль OPT.MOD по сути - это работа с сформированым деревом. Попросту запись в символьный файл, чтение и парсинг структур. Он занимает около 2000 строк. Понятно, что голый Оберон без библиотек только таким образом может записывать структуры в файл... Так вот, если я немного сокращу (до 20 строк) все функции ведь никто не обидится?

И третье... Где мне подсмотреть исходные коды остальных оберонов, на ваш взгляд тем или иным образом улучшеные и измененные.

У меня есть исходник с ассемблером(по моему просто Оберона) так вот нужен ли в Обероне ассемблер? Так как его прикрутка - дело пары дней!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 09:35 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
sa_t_an писал(а):
сразу убивая два зайца.
sa_t_an, что мне вам показывать, когда у вас и своих идей достаточно. Мне нечем заняться, что-ли? Два зайца могут кого-то убить, но если их убивают то двух.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 12:39 

Зарегистрирован: Суббота, 04 Июль, 2009 19:22
Сообщения: 45
GUEST писал(а):
sa_t_an, что мне вам показывать, когда у вас и своих идей достаточно


Странное у вас представление о помощи???

Ну скажем, со своими идеями я справлюсь без посторонней помощи, а с чужими идеями, реализоваными на С++ мне требуется небольшая помощь(я люблю С и не очень С++ и студию)...

Вопрос почти предпоследний :D
Имеем функцию

Код:
  PROCEDURE SymWBytes(VAR x: ARRAY OF SYSTEM.BYTE; len: INTEGER);
    VAR i: INTEGER;
  BEGIN i:=0;
    WHILE i < len DO SYSTEM.VAL(CHAR, x[i]); INC(i) END
  END SymWBytes;


Так вот что будет в -> х после вызова таким образом
lr:= 12345.123456789;
SymWBytes(lr, 8 );

Тока кому не влом, если можно побайтно...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2009 13:07 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
sa_t_an писал(а):
Вопрос почти предпоследний :D
Имеем функцию
Тока кому не влом, если можно побайтно...
Я что-то вообще не вижу, чтобы эта процедура что-то делала с x. Это вообще компилируется?


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

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


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB