forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   создание MIDletPascal compiler'a (http://forum.boolean.name/showthread.php?t=6385)

Serg153 12.01.2009 01:02

Ответ: создание MIDletPascal compiler'a
 
эээээ... а существует ли какой уже готовый компилятор(типа Джавового ассемблера) - небольшой по размеру - типа жасмина или какого в ехе варианте...
тогда можно будет написать промежуточный транслятор Паскаля в JavaАссемблер - и на этот асм вызывать Сторонний компилятор (из батников) - хотябы на первое время....
---
по IDE это чисто идеи.. пожелания.. то - что было бы удобно пользователю...
например чтоб неписать begin end; постоянно - в редакторе сделать подстановку на символ {+Ctrl+Space....
и чтоб люди идей сюда побольше отписали....
(например в 3-4 окно добавить 6ую анализ-панель - где былибы описаны Из текущего модуля
все Uses Var integer string image command Procedure Function ну и тд -
сразу визуально видишь что уже написано - тык мышкой и перешёл в редакторе на ту строчку.... удобно... :=)
добавить операции сдвига для Integer....
сделать макроподстановки #define с текстом процедур на паскале
добавить, вероятно - типа визуального редактора Форм и меню для распространённых типов экранов - чтоб он генерировал паскалькод...

abcdef 12.01.2009 01:24

Ответ: создание MIDletPascal compiler'a
 
компилятор будет, если все понемножку приложим усилия, мне вот надоело все тянуть за уши, для общего дела старался, на чистом энтузиазме, а все наверное ждали готового результата. Вот satan'у спасибо, помог с отладкой/тестированием дизассемблера, а как дошло до компилятора - что-то не заладилось...

Думаю лучше вместо нашлепок на существующий MP делать другую, схожую но расширенную систему, тем более что обновлений не предвидется, а посему: MP обречен на вымирание, с его то ограничениями и ошибками.

Все необходимые исходники уже имеются в этой теме... кто ещё будет участвовать в проекте?
____
вопрос про IDE на текущем этапе похож на деление неиспекшегося пирога, хотя могу сказать что где-то вроде были у меня исходники на delphi спец.редактора с подсветкой синтаксиса "notepad++"

Serg153 12.01.2009 02:06

Ответ: создание MIDletPascal compiler'a
 
глянь исходники - я может попробую часть Редактора на Дельфях написать....
---
надо описать Структуру МПного языка - операторы-функции (хотябы начало) - сделать Основу транслятора - хотябы чтоб выводил Листинг на Jave...
в общем я за проект.... что смогу то помогу :=)

ViNT 12.01.2009 02:22

Ответ: создание MIDletPascal compiler'a
 
В общем-то, поучавствовать в проекте не откажусь, могу писать различные вспомогательные утилиты, заниматься IDE, но в компиляторах я ничерта не смыслю. А так - готов помочь.

satan 12.01.2009 08:34

Re: создание MIDletPascal compiler'a
 
Вложений: 1
Господа...

К чему эмоции??? Гы....

Вообщем увлекся я и написал компилятор для винды... О_о...
Ну да ладно, меняем линкер и получаецо для явы...

В архиве расплантованый по категориям проект(расписал все что нужно)

Синтаксис Delphi+ BPascal
типы пока 3 integer, char, boolean остальные вытекают из базовых

поддерживаюца массивы (надо прикрутить открытые)
поддерживаюцо переходы, упр конструкции и методы (в case надо добавить обработку [xx]..[xx]:
Разбил на модули, что бы удобнее было работать группой, оно как ассемблер и т.д. мож хто и не знает, а структуры и форматы тож мож хто не знает...

ЛОГИКА КОМПИЛЯТОРА

--------------------------------------

1. Входной файл загружается в переменную CurChar и с помощью СКАНЕРА посимвольно считывается
2. Сканер (Scaner.pas) проводит синтаксический анализ и возвращает ID текущего символа или строки в переменную CurTok
3. Парсер (Parser.pas) начинает лексический анализ используя функцию сканера GetToken для возвращения типа текущего оператора или команды и на основании этого генерирует объектный код который записывает в стек (разделен на без параметров, 1 параметр, 2 и 3) вида [ID команды]___[ID параметра[,параметров]]
То есть по сути дела стек (Code[]) - это массив из значений комманд и параметров которые потом переведутся в асм код
3.1 Попутно парсер записывает в таблицу идентификаторов имена функций, процедур, констант и массивов, и т.д.
4. После работы парсера (если в коде не обнаружено ошибок) массив передается функции AssembleAndLink (CodeGen.pas) которая на основании стекового кода уже генерирует ассемблерный код
5. После работы Кодогенератора у нас получается массив объектного кода (без заголовков, секций и т.д.) по сути дела это и есть код ассемблерной секции, а в IdentTab - готовый код для КОНТЕНТНОГО ПУЛА
6. После этого код передается в линкеру(Linker.pas) функцией WriteOpCode (пока не прикрутил) и линкер должен сформировать пул и код

Вообщем осталось всего чуть чуть, проработать Linker.pas
Так же оставил место для ASM вставок вида
asm
.......
.......
end;
и обработку его в модуле Assembl.pas (пока просто тупо пропускает как коментарии)

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

Далее... IDE уже есть, исходники кому надо предоставим, компоненты к ней и контролы тоже, подсветка в ней уже есть, как и функции сворачивания кода, нумерация строк и т.д т.п. Кто хочет заняться милости просим...

По адресу http://www.kirov.fm/pascal.zip прикрепил компилятор Java (Jikes) с библиотеками, примерами и параметрами коммандной строки....

УФ...

ViNT 12.01.2009 13:37

Ответ: создание MIDletPascal compiler'a
 
А возможность вставки java-кода будет?

Serg153 12.01.2009 17:11

Ответ: создание MIDletPascal compiler'a
 
>>Далее... IDE уже есть, исходники кому надо предоставим...

а на каком языке исходники? если для дельфей, то выложи для "доработки"?

>>>А возможность вставки java-кода будет?
мгмгм... тут надо порешить... наверное вставки либо в JavaAsm либо в JavaCode - но с какими нибудь ограничениями (неопределять переменные или функции..... хз....

ЗЫ - перечитал ветку.... в итоге должен получится JaPscal для мобильного телефона?
который будет делать типа:

JaPscal --> JavaCode --> JavaAsm --> Class; Class + resurs --> Jar приложение;

а также

Jar приложение --> Class + resurs; --> JavaAsm --> JaPscal; (или JamPascal)...

типо того??? всё в одно флаконе? :=)

abcdef 13.01.2009 00:12

Ответ: создание MIDletPascal compiler'a
 
satan, а что не хочешь использовать уже готовый ассемблер? генерация кода компилятора Pascal сводится только к выдачи в текстовом виде константного пула и оформлении попрограмм, тем более, появляется возможность вручную проредить код будующей программы (ну и те-же самые ассемблерные вставки, но только на другом уровне)... а в монолитной версии компилятора в генерированный код уже не вмешаешься...
___
p.s. Serg153 ошибся редактор написан на VC++ 7 если интересно здесь глянь http://cbuilder.ru/index.php?topic=1771.0

satan 13.01.2009 05:08

Re: создание MIDletPascal compiler'a
 
Эээээ... А шо за готовый ассемблер???

Вообще щас выкинуть надо из кодогенератора виндовый ассемблер и прикрутить байткод ява асм...

Выкладываю IDE + контролы... (папка res) там же и иконки

abcdef 13.01.2009 09:24

Ответ: создание MIDletPascal compiler'a
 
assembler- файл из моего предыдущего вложения jcc.pas, (JavaClassCompiler) все равно, если реализовывать монолитно, практически весь код нужно будет брать из jcc,
ведь в class-файле главное даже не байтовый код (как в традиционных ассемблерах, а то и вправду было бы проще непосредственно в class-файл писать),
а его связка с константным пулом, и всякие структуры, которые jcc кстати позволяет писать в любом месте, он потом сам расставит все по своим местам

satan 13.01.2009 12:31

Re: создание MIDletPascal compiler'a
 
Мля... ну дыг я к етому и иду... Посмори в линкере... Там уже все твои структуры прописаны...

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

abcdef 13.01.2009 14:43

Ответ: создание MIDletPascal compiler'a
 
не спорю, подпрограмма кодогенерации действительно несколько раздута, но зато она однозначно знает какой тип операнда должен быть в текущий момент

satan 13.01.2009 14:52

Re: создание MIDletPascal compiler'a
 
Дыг какой тип операнда уже выдает парсер, он для етого и существует, фишка вся в том, что если делать по другому то вызовы функций внутри вызовов функций и рекурсивные функции просто умрут (как ты определишь адрес загрузки функции вот тут допустим)

writeLn(abs(chr(MyFunction(n,e, TwoFunction(e,n)+33))));

Serg153 13.01.2009 16:38

Ответ: создание MIDletPascal compiler'a
 
2satan - а где будут использованы такие выражения?
может Ограничить пользователя в построении сложных построений... ;=)
написав ошибку слишком сложное ....
либо ввести промежуточные (добавленные компилятором) перменые для хранения промежуточных результатов?
типа writeLn(abs(chr(MyFunction(n,e, TwoFunction(e,n)+33))));
_ex1 := TwoFunction(e,n) + 33;
_ex2 := MyFunction(n,e, _ex1);
_ex1 := chr(_ex2);
writeln(abs(_ex1));
типа так?

Serg153 13.01.2009 16:43

Ответ: создание MIDletPascal compiler'a
 
Зы - разбиение сложных выражений - на более простые, можно реализовать ещё врелакторе текста - типа на прогоне "препроцессора" -
который вставлял константы, делал подстановку макрокоманд..?
---
например: в тексте проги в отделе определения переменых будет макрокоманда типа
#define Cls; -пробел- setColor(255, 255, 255); fillRect(0, 0, getWidth, getHeight); #endef /выражение на языке паскаля/

при начале компиляции препроцессор заменит Cls на операторы и заодно разобьёт Сложные выражения на простые?


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot