![]() |
Re: создание MIDletPascal compiler'a
Цитата:
ЗЫ... Мля... и поставте наконец Turbo Delphi или FreePascal нафик, иначе в будущем не разгребешь... |
Ответ: создание MIDletPascal compiler'a
2abcdef - по компилятору....
начни всётаки с компилятора JavaAsmbler to Class ведь по идее - какойбы небыл язык в ИДЕ, он оттранслируется в жаваасм а также в Проекте появится возможность : - имеем jar проги - нажали кнопочку - бац... произошло дизасемблирование...(несколькоуровневое) - из Class - появится JavAsm - который по возможности, преобразуется в MPascal - со вставками недиз. в кодах Asm.... EndAsm === 2satan - имеется в виду пример(исходник редактора) основанный на стандартных компонентах delphi из TMemo или TRichEdit - с гуттером (полоска с номерами строк и [+] [-] развёрток структур --- а скоко весит TDelphi ? где можно скачать? (я оттого спрашиваю - потому что, юзаю инет, через жопорез... а там многого нескачать... :-( |
Ответ: создание MIDletPascal compiler'a
чтобы например AsemblerJavaByte (AJB) понимал и делалл Class из такого файла...
Код:
; в заголовке указываем имя основного класса (например, Hello) |
Re: создание MIDletPascal compiler'a
Я выше закидывал пример, но вот ссылка на компонент
http://www.silicontaiga.ru/home.asp?artId=5131 А TDelphi - около 30 метров (Китайский урез, называется Delphi 10 lite)... Но она из простой делфи, у меня к ней пристройка есть что бы все было чин-чинарем - типа Turbo... |
Ответ: создание MIDletPascal compiler'a
2Satan - спасибо за ссылку... поковыряю оттуда реализацию гуттера...
(щас проблемка в алгоритме свёртывания блоков текста) --- а вообщето только от реализации Ассемблера/дизасемблера class файлов(в отдельных от IDE модулях(ехе)) - зависит какой язык(синтаксис) получится... ведь если асм есть - то можно будет сделать "легко" и мидлетбейсик и паскаль и си и вообще свой скриптоязык... ведь там будет просто транслятор Язык--> в Аsм - --- 2abcdef - кажется ты уже сделал именно ассемблерный компилятор(asm-->class)? будь ласка, опиши спецификацию реализованного, я тогда к Иде прикручу транслятор и будем пробовать уже чтото писать... :-) |
Ответ: создание MIDletPascal compiler'a
---
да и ассемблер должен быть более "дружественным"... например в текущем асме числа загружаются в стек такими командами числа от -1 до 5: iconst_m1, iconst_0, iconst_1, iconst_2, iconst_3, iconst_4, iconst_5. Числа от 6 до 127: bipush 6, bipush 44, bipush 127. Числа от 128 до 32767: sipush 128, sipush 255, sipush 1000, sipush 4096, sipush 32767. Числа от 32768 до (2^31)-1: ldc 32768, ldc 16777215, ldc 1000000000. Числа от 2^31 до (2^63)-1: ldc2 1000000000000 --- так пускай асм возмёт на себя проверки диапазонов и вставку нужного байт кода - а юзер пусть пишет типа iPush 25235(любые числа) или dPush 3.14592 |
Re: создание MIDletPascal compiler'a
Да хренотенью вы страдаете :)
abcdef уже давно выложил структуры class файла, их заполнить парсером три секунды, тут их штуки три или четыре... Я говорю наверно раз в 10, что весь гиморой начнётся с качественным парсингом математических выражений, тоесть самый начальный нижний уровень, а ассемблер java писать, тока руки марать, вот пример асма java на коленях (типа теория) type operator = (op1,op2,op3.........op50,op51); var NameOp = ('iconst_0', 'iconst_1', 'iconst_2'......'ldc') .... -> типа сканер уже написан PHP код:
Я не пойму что тут сложного? |
Ответ: создание MIDletPascal compiler'a
>>>что весь гиморой начнётся с качественным парсингом математических выражений,
--- приведи примеры таких выражений... я гдето видел на дельфях парсер(ехпрессион) математических выражений... я поковыряю его насчёт алгоритмов... я просто в примерах и библиотеках MidletPascala невстречал очень уж сложных выражений... так, в одной строке (+-)*/ 3-4-5 операндов.... |
Re: создание MIDletPascal compiler'a
Ну например
x:=((12+(y/z-33.456)+d[a+b-c]*56) mod 5 = 44.5); К стати когда пишешь типовые компиляторы потом глубоко осознаешь почему вот этот код for i:=0 to 100 do writeln(chr(i)); коренным образом отличается от S:='' for i:=0 to 100 do S:=S+chr(i)+#13#10; WriteLn(S); |
Ответ: создание MIDletPascal compiler'a
может, пригодится:
http://algolist.manual.ru/syntax/index.php |
Ответ: создание MIDletPascal compiler'a
2satan - вот твой оператор - x:=((12+(y/z-33.456)+d[a+b-c]*56) mod 5 = 44.5);
а что ты от него хотел оптимизировать? - покажи результат?. --- а так ещё в редакторе текста он выдаст Error о несоответсвии типов операндов подкрасив в красный цвет слово mod - оператор остатка Целочисленного деления(для операндов типа Integer... опятьже - изменив оператор деления на / x:=((12+(y/z-33.456)+d[a+b-c]*56) /5 = 44.5); получим логическое выражение.. true или false т.е транслятор схавает такое выражение и передаст ассемблеру на формирование байт кода [1oe преобразование текста - Язык в Java] Код:
... типа так будет.... |
Re: создание MIDletPascal compiler'a
Вот... наконец то мы подошли к главному...
А теперь, что бы мысль не скакала впереди носа, попробуй ПРОГРАМНО определить ошибку в любом выражении... Так, для прикола набросай функцию (эдакий маленький синтаксический анализатор) на корректность... Просто кнопочку и Edit в котором будем вводить выражения... :) а лучше что бы он еще и считал все что ему на данном этапе можно просчитать... Не надо спешить и формировать как это БУДЕТ выглядеть в компиляторе, тут до этого куча работы... :))) А вот уже после этого компилятор написать, что к подруге сходить... ЗЫ к стати public static int d[]; может быть совсем не int или сначала будет int а потом real (приведение типа) а z сначала может быть одним, а в самый неподходящий момент(например выше по коду) вдруг оказаться нулём, и компилер упадет от переполнения... Самое интересное начнется в выражениях такого плана x:= d[d[a]*a] или d[d[c-a[d[c]]]] если диапазон не верный... Вобщем тут куча примерчиков, которая очень хорошо понимается когда кодируешь а не когда рассказываешь... |
Ответ: создание MIDletPascal compiler'a
навскидку...
во первых - чтобы анализировать выражения - нужно знать Типы операндов - далее разбиваем выражения на "лексемы" - минимальные выражения ^+-*/ ,(+добавляем Вес к выражению в виде табл (операнд|тип || Операнд Тип || операция+-* || вес || признак законченности разложения (щас я не знаю конкретную реализацию асм - куда промежутоные результаты вносить, в стек или промеж переменные - генерируемые транслятором - --- именно редактор текста(IDE) , совместно с транслятором на АСМ(Java) - будут подготавливать текст уже для Компилятора === например x:=((12+(y/z-33.456)+d[a+b-c]*56) /5 = 44.5); табличка будет формироваться в несколько интераций 1- (это относится к компилятору - продолжу попозже... а вот насчёт анализатора выражений... ...приведу пример из дельфи, выражение которое мы хотим парсировать: Код:
(23.34 + 21.21) * 2.92 - 12.21 * sin (180) * -1 Код:
Expr ::= Term + Expr | Term - Expr | Term Примечание: TParser имеет ошибку в подпрограмме парсирования плавающего числа. Любое сочетание символов с символами '+' или '-' воспринимается как часть плавающего числа, поскольку 1e+3 корректное выражение. Естественно, это должно быть правильным только в совокупности с символом 'e'. Поэтому вы должны убедиться, что перед символами '+' и '-' имеется хотя бы один пробел, как показано в вашем выражении. Вы можете это исправить (если у вас есть исходный код VCL), редактируя функцию TParser.NextToken. Скопируйте поочередно три приведенных ниже файла и вставьте их в окно редактора Delphi. Самый простой способ - закройте все открытые проекты и создайте новый модуль. Выделите весь текст, сгенерированный Delphi и вставьте текст модуля ExpParse. Сохраните его под именем ExpParse.pas. Затем создайте другой модуль, перенесите в него EvalForm.pas и также сохраните. Снова закройте файл и создайте новый модуль. Вставьте в него EvalForm.dfm и сохраните, выбрав меню "Save as" и отметив в списке тип файла DFM. Затем создайте новый проект, удалите форму, созданную по умолчанию и добавьте файл EvalForm.pas. -----------------------ExpParse.pas---------------------------- Код:
Код:
unit EvalForm; Код:
|
Ответ: создание MIDletPascal compiler'a
PS -
а z сначала может быть одним, а в самый неподходящий момент(например выше по коду) вдруг оказаться нулём, и компилер упадет от переполнения... ---- диапзаон - почему именно компилятор должен упасть - если диапазон неверный? - ведь он просто транслирует комманды введёные пользователем в машинный код... (тут 2 варианта - 1-добавить в математическую библиотеку выражения типа try { } catch(Exception exception) { } для обработки массивов - да и почему компилятор должен 2 - на стадии ввода текста (при синт анализе выводить при "сложных" выражениях сообщения о Оптимизации кода - пускай юзер преобразует код в более лёгкое для понимания выражение ----------- стати public static int d[]; может быть совсем не int или сначала будет int а потом real (приведение типа) --- в мобильнике нет реал - это будет в библиотеке.. try { } и туда вставить --- Самое интересное начнется в выражениях такого плана x:= d[d[a]*a] или d[d[c-a[d[c]]]] если диапазон не верный... --- неее - ты приведи пример где Реально требуются такие выражения - что это за изврат??? ну и всё одно транслятор сгенерирует примерно такой код ;x:= d[d[a]*a]; varK1 = d[a] varK2 = varK1 * a x = d[varK2] или ;x:= d[d[c-a[d[c]]]] - надеюсь а[ это отдельный массив? varK1 = d[с] varK2 = a[varK1] varK3 = c - varK2 varK4 = d[varK3] x := d[varK4] --- тут конечно можно пооптимизировать насёт повторного использования переменных сгенерированных компилятором(varKn)... но это уже поле для дальнейшего "улучшения" реального транслятора... ========== ЗЫ - под транслятором я понимаю промежуточную програмку(модуль ЕХЕ) - который преобразует введёный пользователем тест на Языке(мПамкаль) - в код понятный Именно компилятору (псевдо ассемблер - или.. если у нас пользуется Мидлет - то типа к JASMin коду) а уже Компилятор сгенерирует обьектынй код (Class) - для использования в мобиле... --- а засовавать ВСЁ в одно.. это точно Извращение... какая мне разница(юзеру) - сколько прогонов будет сделано для получения из Текста - готовый JAr Jad файлы? 3..4... 5 секунд или 10? если я пользую это на своём двухядерном E6600 к примеру... |
Ответ: создание MIDletPascal compiler'a
2Satan - поясни пжлста что ты подразумеваешь под "оптимизациями" с примерами....
---- - неотимизированное Выражения на Языке(паскаль) - оптимизированное выражение на Языке - неотимизированный код на псевдо ассемблере - оптимизированный код на псевдо ассемблере ------ покажи примеры - какой "выйгрышь" даст оптимизация - в чём она будет заключаться.... ===== да... по проекту Нового Мидлет Паскаля... нужно всётаки составить ТЗ на весь комплекс (IDE, компиляторы, трансляторы, дизасемблеры редакторы рисунков, редакторы файлов помощи, сами фалы помощи, доп файлы... хз что ещё добавить...:-) ) а также составить список ToDo --------------- подробное| кто | исполнение задание | взялся | zip исходников --------------------------------------- 1 2 3.... |
Часовой пояс GMT +4, время: 03:16. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot