![]() |
Ответ: создание MIDletPascal compiler'a
эээээ... а существует ли какой уже готовый компилятор(типа Джавового ассемблера) - небольшой по размеру - типа жасмина или какого в ехе варианте...
тогда можно будет написать промежуточный транслятор Паскаля в JavaАссемблер - и на этот асм вызывать Сторонний компилятор (из батников) - хотябы на первое время.... --- по IDE это чисто идеи.. пожелания.. то - что было бы удобно пользователю... например чтоб неписать begin end; постоянно - в редакторе сделать подстановку на символ {+Ctrl+Space.... и чтоб люди идей сюда побольше отписали.... (например в 3-4 окно добавить 6ую анализ-панель - где былибы описаны Из текущего модуля все Uses Var integer string image command Procedure Function ну и тд - сразу визуально видишь что уже написано - тык мышкой и перешёл в редакторе на ту строчку.... удобно... :=) добавить операции сдвига для Integer.... сделать макроподстановки #define с текстом процедур на паскале добавить, вероятно - типа визуального редактора Форм и меню для распространённых типов экранов - чтоб он генерировал паскалькод... |
Ответ: создание MIDletPascal compiler'a
компилятор будет, если все понемножку приложим усилия, мне вот надоело все тянуть за уши, для общего дела старался, на чистом энтузиазме, а все наверное ждали готового результата. Вот satan'у спасибо, помог с отладкой/тестированием дизассемблера, а как дошло до компилятора - что-то не заладилось...
Думаю лучше вместо нашлепок на существующий MP делать другую, схожую но расширенную систему, тем более что обновлений не предвидется, а посему: MP обречен на вымирание, с его то ограничениями и ошибками. Все необходимые исходники уже имеются в этой теме... кто ещё будет участвовать в проекте? ____ вопрос про IDE на текущем этапе похож на деление неиспекшегося пирога, хотя могу сказать что где-то вроде были у меня исходники на delphi спец.редактора с подсветкой синтаксиса "notepad++" |
Ответ: создание MIDletPascal compiler'a
глянь исходники - я может попробую часть Редактора на Дельфях написать....
--- надо описать Структуру МПного языка - операторы-функции (хотябы начало) - сделать Основу транслятора - хотябы чтоб выводил Листинг на Jave... в общем я за проект.... что смогу то помогу :=) |
Ответ: создание MIDletPascal compiler'a
В общем-то, поучавствовать в проекте не откажусь, могу писать различные вспомогательные утилиты, заниматься IDE, но в компиляторах я ничерта не смыслю. А так - готов помочь.
|
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) с библиотеками, примерами и параметрами коммандной строки.... УФ... |
Ответ: создание MIDletPascal compiler'a
А возможность вставки java-кода будет?
|
Ответ: создание MIDletPascal compiler'a
>>Далее... IDE уже есть, исходники кому надо предоставим...
а на каком языке исходники? если для дельфей, то выложи для "доработки"? >>>А возможность вставки java-кода будет? мгмгм... тут надо порешить... наверное вставки либо в JavaAsm либо в JavaCode - но с какими нибудь ограничениями (неопределять переменные или функции..... хз.... ЗЫ - перечитал ветку.... в итоге должен получится JaPscal для мобильного телефона? который будет делать типа: JaPscal --> JavaCode --> JavaAsm --> Class; Class + resurs --> Jar приложение; а также Jar приложение --> Class + resurs; --> JavaAsm --> JaPscal; (или JamPascal)... типо того??? всё в одно флаконе? :=) |
Ответ: создание MIDletPascal compiler'a
satan, а что не хочешь использовать уже готовый ассемблер? генерация кода компилятора Pascal сводится только к выдачи в текстовом виде константного пула и оформлении попрограмм, тем более, появляется возможность вручную проредить код будующей программы (ну и те-же самые ассемблерные вставки, но только на другом уровне)... а в монолитной версии компилятора в генерированный код уже не вмешаешься...
___ p.s. Serg153 ошибся редактор написан на VC++ 7 если интересно здесь глянь http://cbuilder.ru/index.php?topic=1771.0 |
Re: создание MIDletPascal compiler'a
Эээээ... А шо за готовый ассемблер???
Вообще щас выкинуть надо из кодогенератора виндовый ассемблер и прикрутить байткод ява асм... Выкладываю IDE + контролы... (папка res) там же и иконки |
Ответ: создание MIDletPascal compiler'a
assembler- файл из моего предыдущего вложения jcc.pas, (JavaClassCompiler) все равно, если реализовывать монолитно, практически весь код нужно будет брать из jcc,
ведь в class-файле главное даже не байтовый код (как в традиционных ассемблерах, а то и вправду было бы проще непосредственно в class-файл писать), а его связка с константным пулом, и всякие структуры, которые jcc кстати позволяет писать в любом месте, он потом сам расставит все по своим местам |
Re: создание MIDletPascal compiler'a
Мля... ну дыг я к етому и иду... Посмори в линкере... Там уже все твои структуры прописаны...
Токма код ассемблерный немного не так как у тя строить надо, а проще, упорядочить по базовому коду и брать тока позицию инструкции вот и все дела, естественно шо кодогенератор переписывать ужо под твои структуры буду и ассемблер. |
Ответ: создание MIDletPascal compiler'a
не спорю, подпрограмма кодогенерации действительно несколько раздута, но зато она однозначно знает какой тип операнда должен быть в текущий момент
|
Re: создание MIDletPascal compiler'a
Дыг какой тип операнда уже выдает парсер, он для етого и существует, фишка вся в том, что если делать по другому то вызовы функций внутри вызовов функций и рекурсивные функции просто умрут (как ты определишь адрес загрузки функции вот тут допустим)
writeLn(abs(chr(MyFunction(n,e, TwoFunction(e,n)+33)))); |
Ответ: создание 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)); типа так? |
Ответ: создание 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