Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 15.11.2008, 10:51   #91
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: создание MIDletPascal compiler'a

создаваемый компилятор итак будет конкурентно-способным потому что на фоне шаблонно-сделанного MIDletPascal'я, который спотыкается при разборе программы (не дай бог вы забудете поставить точку с запятой или кавычку) помнится даже в хелпе в примерах перед else стояли запятые. по поводу другого Pascal'я о котором говорилось на форуме сказать не чего не могу, совместимость с Delphi эт не плохо, но все базируется на встроенных библиотеках а компиляция происходит по огромному шаблону функций в которых нужно еще разобраться. и здесь вроде нет оптимизации.

satan если оптимизация затрагивает только пересчет выражений то это оч. легко реализовать и в моем переделанном компиляторе: в генераторе кода смотреть на две инструкции назад, если константы- то объединять. Уже вообще-то можно приступать полностью к созданию компилятора. алгоритм оптимизации затронет изменение только 4-х функций разбора. давай свои предложения/работающие исходники. просто именно для паскаля лучший вариант все-таки от создателя (Никалус Вирт)
(Offline)
 
Ответить с цитированием
Старый 15.11.2008, 14:48   #92
satan
Нуждающийся
 
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений
(для 28 пользователей)
Re: создание MIDletPascal compiler'a

Начну с начала.

Компиляторами я занимаюсь давно. (Вообще я давно перешел на уровень создания
того, на чем люди делают что-то, редакторы, IDE, конструкторы...) но не в этом суть. Суть в том, что после 3-го или 4-го компилера я понял где основные грабли.
Вспомни первый свой декомпилер. На разбор пула ушло 2 дня, и неделя на ассемблер. Почему? Потому что это основа или нижний уровень, которых в компиляторе два - лекс. ан. и кодлгенератор.

Так как все языки семантически схожи только в одном, именно в выражениях, то и нижний уровень - ассемблер. А значит и начинать надо с него. Креншоу поэтому правильно сделал и написал с чего надо начинать.
Возмем например строку a=b+c b и посмотрим её представление в различных асмах.

Fasm:

mov eax, [esp -4] - переменная b
mov ebx, [esp -8] - переменная c
add eax, ebx - сложение
mov [esp -0], eax - приравнивание a

код относительный - от балды, теперь на Java асм

bipush 2
bipush 3
iadd
iload 1

код тоже по памяти и от вола!

Что мы видим? Похоже, очень даже... Ну да и иначе не могло и быть, асм он и в рассеи асм. Ладно, надеюсь с этим понятно. Тоесть любое выражение можно перевести (не важно на какой ассемблер) а потом перевести с асм на асм дело всего лишь техники! (Вернее дело рук в переписывании операторов).

Теперь рассмотрим ОПЗ (
http://www.wl.unn.ru/~ragozin/compiler/compil/g11.htm
http://decoding.narod.ru/practic/pol...ishrecord.html
)

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

Сравним строку a = b + c в ОПЗ и ассемблером?

b c + a =

mov eax, [esp -4] - переменная b
mov ebx, [esp -8] - переменная c
add eax, ebx - сложение
mov [esp -0], eax - приравнивание a

тут по моему становится ясным мысль о ОПЗ, но тут опять грабли, строка вида

1+a+2+b+3+c

Может вырасти в очень длинный код на ассемблере, поэтому её надо оптимизировать, тобишь привести к виду a+b+c +6, что бы уменьшить код конечного файла, что бы не падал компилятор от переполнения да и наконец - это сложно и круто! Ну и приятно...

Так вот я предлагаю, пока оставить на время верхний уровень, он нам ни черта не нужен пока и заняться нижним уровнем, а именно функцией ВЫРАЖЕНИЕ (Expression), потому что как только мы сделаем эту функцию или набор функций остальное просто останется банальностью, а именно работой сканера и вызов соответствующих функций.

Кстати когда и если мы ето замутим форум может просто лечь от наплыва студентов - курсовиков!!!

ЗЫ...

Никлаус мужик умный, тока он делал свои компилеры под свою Р-машину.
Но выкладываю его Оберон (Модула 2) переделаный для виндовс и сам себя компилящий без глюков. Сайт с документацией и описаловом
http://home.perm.ru/strannik/
Сдесь реализована поддержка 3х языков, Модула-Си-Паскаль (к стати в Оберон я влюбляюсь все более и более) И по исходникам можно глянуть реализацию сканера и т.д. Да и сам язык - это крутой паскаль!!!

Сдесь уже готовый компилер на Обероне
http://www.uni-vologda.ac.ru/job/rus/
связаться с автором пока не удалось, но буду искать

Ну вообщем вот пока мысли......................

Да совсем забыл... Этот модуль будет базовым для ЛЮБОГО компилятора...
Вложения
Тип файла: zip Modula.zip (650.1 Кб, 352 просмотров)

Последний раз редактировалось satan, 15.11.2008 в 15:16.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
abcdef (15.11.2008)
Старый 15.11.2008, 19:39   #93
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: создание MIDletPascal compiler'a

satan, плюсик за хорошее сообщение, Спасибо за ссылки на интернет-ресурсы и исходник.. буду смотреть.. думаю с такой информационной поддержкой проект по созданию компилятора успешно завершится.
___
java-ассемблер завершен на 90% нужно добавить таблицу переходов на метки, генерацию структуры обработчика исключений и авто-генерацию структуры StackMap (сейчас пока вручную на уровне команд).
Код компилятора значительно упростится, когда эти задачи будут переложенны в java-ассемблер.
___
Нашел на просторах жеского диска не рекурсивный алгоритм разбора строкового выражения. Когда-то немножко переделывал. Применялся для построения графиков и т.д.
satan посмотри может появятся идеи по оптимизации константных выражений..
Вложения
Тип файла: zip CALCSTR.ZIP (2.5 Кб, 324 просмотров)

Последний раз редактировалось abcdef, 16.11.2008 в 00:37.
(Offline)
 
Ответить с цитированием
Старый 15.11.2008, 22:26   #94
satan
Нуждающийся
 
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений
(для 28 пользователей)
Re: создание MIDletPascal compiler'a

До кучи добавляю полноценный Pascal компилятор
http://66.196.80.202/babelfish/trans...rotinyp ascal

Компилит сам себя, синтаксис полный (походу), Гы... единственная проблема - ща деобфускацией его занимаюсь!!!
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
abcdef (16.11.2008)
Старый 16.11.2008, 01:11   #95
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: создание MIDletPascal compiler'a

если исходник на pascal'е не форматированный как в этом примере, то примени 3-и утилитки, которые я ранее выкладывал - они должены разобрать и привести исходный код в читабельный вид.

главное компилируй в delphi, а то в pascal'e длина строки не более 255 символов
в примере отдельные строки слишком длинные из-за применения символов "#c"
(Offline)
 
Ответить с цитированием
Старый 16.11.2008, 02:05   #96
satan
Нуждающийся
 
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений
(для 28 пользователей)
Re: создание MIDletPascal compiler'a

Уже на 50% перевел в боле мене нормуль вид и восстановил переменные некоторые и функции
Вложения
Тип файла: zip Project1.zip (8.4 Кб, 319 просмотров)
(Offline)
 
Ответить с цитированием
Старый 17.11.2008, 07:21   #97
satan
Нуждающийся
 
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений
(для 28 пользователей)
Re: создание MIDletPascal compiler'a

В жисти нету справедливости!!! Ковырял 2 дня паскаль, написал автору и он мне выдал полон код
Вложения
Тип файла: zip BeRoPascal.zip (14.0 Кб, 373 просмотров)
(Offline)
 
Ответить с цитированием
Старый 18.11.2008, 21:49   #98
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: создание MIDletPascal compiler'a

добавил структуру и алгоритм вычисления и постороения переходов с использованием меток, теперь pascal-компилятору практически ни чего не нужно знать о командах java-assembler'а, не вести пересчет смещений и т.д.

вот структура для организации переходов:
_______
const
maxlab=1024*5; {кол-во ячеек для сохранения}
typemp=0; {пустой элемент таблицы}
typlab=1; {метка}
typmod2=2; {элемент коррекции 2-х байтового смещения}
typmod4=2; {элемент коррекции 4-х байтового смещения}
var
lab:array[0..maxlab] of record
typ:byte; {тип элемента}
name:string[6]; {название метки}
adr:word; {адрес в коде}
end;
lmax:integer; {кол-во элементов}
_______
логика работы:
метка выглядит так ":имя"
в командах перехода если следующий символ не число, то прочитать имя метки и получить смещение к ней. Если метка еще не добавлена (т.е. переход вперед), то записать элемет как элемент_коррекции.
В завершении метода просматриваем таблицу меток и правим элементы_коррекции на смещение к нужным меткам.
Если метка не найдена, то генерировать ошибку.
__
т.к. размер таблицы переходов ограничен, то рекомендую сделать в pascal'e генератор имён_меток так:
метка - число, конвертируется в текст только при сохранении в выходной файл например так write(':l'+hex2(label)+' '); где label:integer - инкриментируемое число.
Т.к. таблица перехода в ассемблере имеет ограниченный размер, то:
в подпрограмме генерации метки сохраняем номер строки предыдущей метки oldStrNum, а при создании новой:
if currentStrNum<>oldStrNum then
begin
inc(label);
oldStrNum:=currentStrNum;
end;
т.е. не создаем лишних меток...
(Offline)
 
Ответить с цитированием
Старый 28.11.2008, 16:27   #99
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: создание MIDletPascal compiler'a

satan, просмотрел компиляторы, Pascal 32bit неплохо сделан, и идеи реализации интересные, правда не вооруженным взглядом видно что это модификация старого доброго PASCALS. а реализации java компиляторов несколько ограниченные. всё-таки лучше изменить pascals, чем корректировать другие. - работы, а самое главное ошибок будет меньше. и не надо изобретать велосипед...
насчет многоязыкового компилятора вспоминается со студенческих времен поговорка нашего профессора: -если при езде на автомобиле обнимать девушку, то не получится ни хорошо вести машину, ни хорошо обнимать девушку. Поэтому лучше сделать простой и не большой Pascals компилятор, чем гору кода и кучу правил, типа: в этом языке это так, а в другом эдак, и ни как иначе, а то не откомпилит. Лучше сделать отдельную версию под другой синтаксис. так что? переделываем PASCALS?
(Offline)
 
Ответить с цитированием
Старый 28.11.2008, 18:53   #100
satan
Нуждающийся
 
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений
(для 28 пользователей)
Re: создание MIDletPascal compiler'a

Согласен, только луче BeroPascal там уже все готово... Я толко распишу в комментах где что находица, уберу PE ассемблер (вместо него Java asm вставим) а место под пул там уже есть, более того он так же делает байт код промежуточный, поэтому допустим модули можно будет распространять защищёнными...

Кстати все эти паскали (в том числе и BeRo) - это улучшеные модификации PascalS а он в всвою очередь сделан по эпусам Креншоу...

Вопчем ща смотрю и комментю... Вечером приаттачу расписаную версию паскаля единственное что там нужно будет ввести - это типы string и real
(Offline)
 
Ответить с цитированием
Старый 28.11.2008, 19:25   #101
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: создание MIDletPascal compiler'a

Если честно, была сегодня идея переделать BeRoPascal, но взглянул, и сразу стало лень- эт столько переделывать табулировать, условия if менять на case и др, а еще в нем много переменных, не слишком экономно сделан, а мне б хотелось сделать реализацию и на pascal'e. сложил всё вместе и решил что PASCALS. лучше для нормальной работы добавить только цикл FOR. а промежуточный код есть и в pascals, Только он не нужен, программу ж можно декомпилировать
(Offline)
 
Ответить с цитированием
Старый 29.11.2008, 03:05   #102
satan
Нуждающийся
 
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений
(для 28 пользователей)
Re: создание MIDletPascal compiler'a

abcdef
Ты наверно издеваесся... PASCALS и BERO одно и то же, разница в том, что у Беро уже готовый модуль ассемблирования убери его и получиться полный со всеми паскалевыми выпендрезами компилятор в байт код, прикрепляю закоментированую версию, сравни их и увидиш, даже функции одни и те же... Гы...

Там где в Ассемблере я закоментил можно прочитать закоментировать Header вызов (это в нашем случае функция системного пула) и раскоментить создание байт кода...

Осталось в Беро сделать только одно перевести с МакроАссемблера на ява ассемблер (прямо тупо заменяя строки типа

        OPMul:
              begin
                OCPopEBX;
                OCPopEAX;
                OCIMulEBX;
                OCPushEAX;
на

        OPMul:
              begin
                Pop2;
                iMul;
                BiPush;
или круче, сразу в исполняемый class файл

        OPMul:
              begin
                OC(88);   //POP2 извлечение из стека двух чисел
                OC(104); //IMUL умножение
                OC(16);   //BIPUSH помещение в стек результата
Вот и все дела...
Единственная доработка в подключении типа string и real

а так как он компилит сам себя, то и отладка происходит сразу (единственная неудобство, что он ошибки если есть тоже в себя пишет, поэтому приходица типа test.exe переименовывать в test.txt и читать в какой строке ошибка!!!)

Посмори, если какие функции иль ещё чиво не понятно, я опишу их поподробнее, а так получица что из PASCALS мы просто тупо сделаем BERO и прикрутим JAsm... Гы... нафига мартышкин труд, если уже все готово...
Переменные в таблице переменных
Типы в таблице типов
Массивы описаны
Вызовы функций и т.д т.п можно сразу запихивать в пул в функции Header
после ассемблера нам доступен размер кода и смещения...

Короче уже все есть, надо просто сесть и перевести с одного асма на другой!!! И получим систему круче чем МР так как исходники будут открыты...

Если хочешь поэксперементируй с функцией Header типа запиши вместо:
  OCP:=0;
  OCS('MZ
это сигнатура PE файла
  OCP:=0;
  OCS('Кюєѕ
это сигнатура class файла (наше изболевшее CAFEBABE в CHR представлении)
Вложения
Тип файла: zip Pascal.zip (14.0 Кб, 340 просмотров)

Последний раз редактировалось satan, 29.11.2008 в 03:22.
(Offline)
 
Ответить с цитированием
Старый 29.11.2008, 03:32   #103
satan
Нуждающийся
 
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений
(для 28 пользователей)
Re: создание MIDletPascal compiler'a

Кстати не могу никак понять где студенты (им уже готовая дипломная тут написана)
где хакеры им уже готовый код для инжекции готов просто в функции
procedure AssembleAndLink;
var
  JCPC,I,D,CS,SA,SOCP:integer;
begin

  Header; // Закоментировать
закоментить вызов HEADER и получится чистый бинарник для инжекций, его можно даже в дизассемблере посмотреть...

Где фанаты МР тоже не понятно...
(Offline)
 
Ответить с цитированием
Старый 29.11.2008, 03:56   #104
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: создание MIDletPascal compiler'a

Кстати не могу никак понять где студенты (им уже готовая дипломная тут написана)
Хорошего же ты мнения о студентах. Ничего удивительного. Да и, хацерская порода измельчала - пока на весь нет сплойт не пропиаритцо - 31337 не почешется.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 08.12.2008, 21:57   #105
kilan
AnyKey`щик
 
Регистрация: 06.09.2006
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Re: создание MIDletPascal compiler'a

interesno, esli'b eto bilo 3 goda nazad to ja pervim studentom bil
eto tak offtop
a po teme jdu datu reliza
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скачать MidletPascal smesh Прочие вопросы 14 30.06.2011 15:57
создание MIDletPascal obfuscator abcdef Основной форум 7 22.12.2008 23:27
Русификатор MIDletPascal Тренсфер Прочие вопросы 14 26.07.2008 04:00
MidletPascal. Что это. Данил MidletPascal 12 23.10.2007 05:27


Часовой пояс GMT +4, время: 12:20.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com