Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
Ответ: создание MIDletPascal compiler'a
satan, да я не про верхний уровень компиляции, я всегда за рекурсию, тем более при сложных взаимосвязях, результаты рекурсии будут единичные вызовы в произвольных местах и на любой итерации, функции запихивающей в массив новую команду, просто для ассемблера будет полезно если будет вестись контроль передаваемых данных. а насчет адреса вызова, то это ведь java, ей нужно только имя переменной/метода она сама работает с
адресами памяти
Serg153 зачем использовать временные переменные? в стеке достаточно места...
Сообщений: 93
Написано 8 полезных сообщений (для 15 пользователей)
Ответ: создание MIDletPascal compiler'a
Сообщение от abcdef
Serg153 зачем использовать временные переменные? в стеке достаточно места...
---
ну я так понял из постов Satan`a -
>>
...но тут опять грабли, строка вида 1+a+2+b+3+c
Может вырасти в очень длинный код на ассемблере, поэтому её надо оптимизировать, тобишь привести к виду a+b+c +6, что бы уменьшить код конечного файла, что бы не падал компилятор от переполнения...
>>
...вызовы функций внутри вызовов функций и рекурсивные функции просто умрут ...
---
что при компиляции сложных выражений будет переполнение стека Джавамашины... ну в общем мидлет упадёт... :=) - но в принципе я в это нелезу...
пока немного сложновато втыкать в ваш диалог :=)
2satan - ммм... скачал я ide - у мню дельфи 7 - так ругается при открытии формы и компиляции...
типа TActionMainMenuBar - not found...
ToolBar.. properties не определно.. и тд...
может что поправить надо?
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
Ответ: создание MIDletPascal compiler'a
satan, посмотрел исходники, хорошо изложил!
теперь нужно переводить под синтакис java и отладить, это где-то 30% от все работы...
несколько начальных шагов я предпринял но переделывать еще много, результат в прикрепленном файле (генерирует asm-файл), если интересны готовые решения/идеи глянь в мой файл "compile.pas" - тотже алгоритм, только без поддержки подпрограмм/типов/массивов
Что нужно доделать:
1. окончательно вычистить от кода, отвечающего за работу с памятью
2. дописать разделение команд загрузки/сохранения в переменную на работу с локальными переменными/глобальными/массивами
3. добавить инструкцию define, которая будет связывать методы из внешних классов и их параметры вызова, с внутренним именем в исходном коде, как описывал ранее
в будующем:
добавить типы данных String/StringBuffer/Byte и разделить команды для их обработки
___
p.s. жду изменений...
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
Ответ: создание MIDletPascal compiler'a
мои исходники можно компилить в Turbo Pascal 6 и выше. Размеры дистрибутива от 1 до 8 мб (после установки проверить пути к каталогам исходников и tpu библиотекам, и должен существовать каталог для компиленных файлов), также в меню compile отметить destination disc. Также можно откомпилировать в delphi 7 и ниже, для этого достаточно файлов: dcc32.exe; *.cfg; каталоги lib; source. dcc-компилятор командной строки; в файле cfg-пути к каталогам. размеры зависят от кол-ва библиотек, и в пределах 1..50 мб
Сообщений: 93
Написано 8 полезных сообщений (для 15 пользователей)
Ответ: создание MIDletPascal compiler'a
мгммгм... возможно уже спрашивал -)
можно ли сделать из Jar файла - просто жавовское приложение - не для телефона - ЕХЕ файл?
---
если такая возможность есть - то тогда можно присобачить уже готовый жаваасемблер - Жасмин (вроде он фри) только сделать Jar to eхе...
---
модернизировать иде - добавить ДВФ файлы - в которых возможно описать Паскальслово - от него Java строки - от них Jasm строчки - от них Байт_код.... а также всяческие хелп строки...
тогда легко можно будет модернезировать язык - Иде не меняется - только изменются разные справочные базы...
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
Ответ: создание MIDletPascal compiler'a
нецелесообразно переделывать код генерации под процессор x86, хотя не сложно модифицировать команды asm-листинга. Лучше использовать компилятор выложенный satan'ом, только добавить набор стандартных функций. если не охота возиться с компилятором можно написать набор МР-библиотек: хоть для Turbo Pascal, хоть для Delphi -делал так когда-то но заглушками, для проверки синтаксиса программы
Сообщений: 99
Написано 18 полезных сообщений (для 28 пользователей)
Re: создание MIDletPascal compiler'a
Прива все!!! abcdef
Дружище... Посмотрел твою модификацию.... Ээээээ... Ты зачем внутренний стек меняешь то? Не надо... Этот стек сформирован для внутренней нашей виртуальной машины...
То есть функция GenOp просто добавляет в массив Code[] команды и параметры для них. Приблизительно после разбора проги получается примерно следущее в стеке
39 10 28 61 28 77 41 3
переводим на полурусский
OPJmp 10 -> Перепрыгнуть через 10 команд
OPLdC 61 -> Загрузить Сhar(букву) A - код 61
OPLdC 77 -> Загрузить Char(букву) F - код 77
OPCall 3 -> Вызвать подпрограмму с номером 3 в IdentTab
Вот внутренний ассемблер и делает перевод в опкод i386 а нам надо просто перевести в опкод Java...
Поэтому стек не надо переделывать, он уже готов...
Нам надо перекроить всего 2 функции
1. AssembleAndLink (Она перекраивает наш стековый байт код в машинный код)
2. В линкере сформировать константный пул из IdentTab
Ну и в конце концов связать пул и код....
Сообщений: 99
Написано 18 полезных сообщений (для 28 пользователей)
Re: создание MIDletPascal compiler'a
Кстати кто волокет в грамматиках могу подкинуть компилятор компиляторов (исходники) и транслятор Java->Pascal
Транслятор правдо доделывать надо, а вот компилер компилеров работает на ура, создает сразу готовый проект компилятора для Delphi
Сообщений: 93
Написано 8 полезных сообщений (для 15 пользователей)
Ответ: создание MIDletPascal compiler'a
вернусь к IDE, как к одному из ключевых моментов компилятора...
неудалось мне использовать ide от satan - ненашёл полный набор для сунедита...
---
вобщем начал писать на Д7 - редактор - будет Rich текст
с подсветкой синтаксиса и предварительной трансляции в Паскаль-подобный язык...
на этапе парсера возникла небольшая проблема с индетификацией ещё необьявленных переменных,функций, процедур...
например есть текст
var
a1,a2,a3 : integer;
c1 : command;
---
может немножко поменяем Синтаксис Языка?
например так
Var
Integer : a1,a2,a3;
Command : c1;
???
---
тогда и в параметрах функций писать func name( string : s1,s2;integer : byte a1); ???
надоели begin end - может заменить на { } - а многострочные комменты оформлять в виде /* comment */ ???
тем более редактор автоматом будет оформлять {} [] ()
---
определиться бы с ТИПАМИ переменных
у нас их будет примерно:
· boolean
· char
· integer
· real
· string
· image
· command
· recordStore
· http
· resource
Комплексные типы:
· record
· array
если JAVA поддерживает байтовые - то можно добавить тип byte ?
---
как вариант назвать компилятор MidletPScript - так как язык немного изменится...
---
редактор на выходе будет выдавать - тут несколько вариантов:
- текст на java
- текст на j ассемблере
- или на каком нибудь подобии языка...
отдельным ЕХЕ сделать уже чисто компилятор исходника в CLASS
и запускать его из Редактора... тогда можно будет использовать редактор для разных языков...
---
попробую реализовать транслятор из Редактора в Java ассемблер (нашёл компилятор Жасмин) - вернее сперва в Java, затем в Жасмин...
---
редатор на этапе набора текста будет осуществлять синтаксическую проверку, использовать "коде темплате", вывод в хелп окошко - файл помощи по конкретонму оператору, также при присоеденению к проекту файла рсиунка - обработает его с помощью pngout.exe - для сжатия картинки....
---
скоро выложу текст иде для тестирования...
Сообщений: 93
Написано 8 полезных сообщений (для 15 пользователей)
Ответ: создание MIDletPascal compiler'a
вот примерно так выглядит эта Иде... :=)
в Зипе - как бы рабочая папка компилятора
---
пока всё недоделано.. чиста на Предварительный вид
---
доделаю - хелпокно на каждый оператор + коде джампер + синтаксичесуий анализатор кода и выложу исходники - пользую D7
Проект совсем умер? Понимаю, что оффтоп, но уж больно долго тема молчит. Не забили ли разработчики на это дело из-за недостатка внимания к проекту со стороны пользователей? Было бы обидно.