Форум: "Прочее";
Текущий архив: 2013.05.26;
Скачать: [xml.tar.bz2];
ВнизИщу энтузиаста, который умеет парсить паскаль-код Найти похожие ветки
← →
DevilDevil © (2013-01-09 10:33) [0]Здравствуйте, уважаемые форумчане
Я работаю над проектом, который существенно упрощает связывание Delphi/FPC и скриптов на языке Lua: http://www.gamedev.ru/projects/forum/?id=140784
в данный момент происходит существенная переработка проекта. В первую очередь это поддержка Unicode. Во-вторых, упор делается на максимально быстрое выполнение. В-третьих, библиотека должна максимально локализовывать и детализировать ошибку. С большой долей вероятности (я на это очень надеюсь), появится полноценная IDE для программирования и отладки скриптов.
Большой кусок нововведений - это так называемые Автобиндинги. Это механизмы, благодаря которым пользователям не нужно будет писать промежуточных калбеков с перевызовами необходимых методов. К примеру в PascalScript "сигнатура" метода указывается строкой. Но кроме этого способа к примеру typeinfo(события) имеет всю необходимую информацию. В Delphi >= 2010 typeinfo имеет и обычный метод (не of object). Interface-ы имеют typeinfo с необходимой информацией по методам. Ещё у меня есть идея параметризированные свойства регистрировать с указанием строки параметров
В общем автобиндинги - это большой блок, часть которого мне хочется делегировать. Конечно я и сам могу его выполнить, но это существенно оттягивает релиз, кроме того морально легче понимать, что не ты один тянешь лямку, а с тобой в команде есть ещё талантливые и амбициозные программисты. Однако я сразу замечу, что я привык делать хорошо. Абы как сделать не получится. И потом есть ряд нюансов по проекту, которые так же придётся учитывать.
Хочется найти такого программиста, который хотел бы поучаствовать в этом проекте, который обладает хорошими знаниями. В частности есть опыт парсинга паскаль-кода. Знание RTTI и ассемблера очень приветствуются. Мои контакты (имейл, icq) найдёте по ссылке выше
С уважением
← →
Kerk © (2013-01-09 12:18) [1]https://github.com/jacobthurman/Castalia-Delphi-Parser не?
← →
DevilDevil © (2013-01-09 12:29) [2]> Kerk © (09.01.13 12:18) [1]
Привет!
По сути парсинг простой. Нужно определять метод ([class] procedure/function, имя, соглашение вызова) и параметры (имя, тип, директивы)
Т.е. какой-то дополнительной библиотеки для этого не нужно. Да и вообще хочется покомпактнее код, а то и так библиотека раздувается.
Суть в том, что для парсинга нужно иметь опыт, устоявшийся взгляд, знать подходы. И уже имеющиеся знания применить в конкретной прикладной области
← →
Vegeta (2013-01-09 14:07) [3]Даже не надейся. Никому не захочется копаться в этом сомнительном нагромождении ассемблера.
← →
Rouse_ © (2013-01-09 14:40) [4]
> Vegeta (09.01.13 14:07) [3]
> Даже не надейся. Никому не захочется копаться в этом сомнительном
> нагромождении ассемблера.
я бы не стал утверждать за всех...
← →
DevilDevil © (2013-01-09 14:46) [5]> Vegeta (09.01.13 14:07) [3]
1) я никого не заставляю копаться в исходниках
2) знание ассемблера - плюс, а не минус современного программиста
3) знание ассемблера для этой задачи желательно потому, что в конечном счёте текстовая сигнатура метода будет распознана в данные; перед вызовом функции определённые параметры будут отправлены в стек, а определённые - в регистры. Знающий ассемблер будет учитывать эти особенности
4) любая дополнительная работа по проекту осуществляется "на стороне". А интеграцией наработок в библиотеку занимаюсь я
← →
Kerk © (2013-01-09 14:49) [6]
> DevilDevil © (09.01.13 14:46) [5]
> 3) знание ассемблера для этой задачи желательно потому,
> что в конечном счёте текстовая сигнатура метода будет распознана
> в данные; перед вызовом функции определённые параметры будут
> отправлены в стек, а определённые - в регистры. Знающий
> ассемблер будет учитывать эти особенности
Ого на что ты замахнулся. Удачи тебе :)
← →
DevilDevil © (2013-01-09 15:03) [7]> Kerk © (09.01.13 14:49) [6]
:)
По большому счёту это не мега сложно :)
Какие-то параметры идут в стек, какие-то в регистры. Результат либо в eax, либо в eax:edx, либо в st(0), либо последним аргументом. Для safecall нужна дополнительная проверка HResult :)
больше меня беспокоят директивы. const, var, out, array of, отсутствие директивы
вот это действительно интересные моменты... но зато представь, как облегчится интеграция методов! А ещё конечно хотелось бы сделать дефолтные значения.
если в PascalScript есть, то почему бы нам не сделать
← →
Kerk © (2013-01-09 15:31) [8]
> DevilDevil © (09.01.13 15:03) [7]
var - это не самое страшное, по сутиvar param: Integer
- это то же самое, чтоparam: PInteger
. const - вообще можно игнорировать.
Но в целом я бы сделал что-то типа XML-RPC. Счастье всем даром - это конечно круто, но боюсь, подводных камней будет многовато, трудозатраты того не стоят.
← →
DevilDevil © (2013-01-09 15:38) [9]> var - это не самое страшное, по сути var param: Integer
> - это то же самое, что param: PInteger. const - вообще можно
> игнорировать.
я это всё понимаю.
просто все эти сложности, где передавать само значение, а где передавать только указатель. const можно игнорировать только для простых типов. а для структур или массивов там появляется другая логика. сложнее с array of. И ещё круче - array of const. Но всё решаемо
Ты наверное просто не часто используешь скрипты. а вообще удобная вещь
← →
Kerk © (2013-01-09 15:42) [10]
> а для структур или массивов там появляется другая логика.
> сложнее с array of. И ещё круче - array of const.
То-то и оно. Оно того не стоит.
Плюс ко всему - оно у тебя будет намертво к платформе привязано.
В общем, дело твое. Я свои опасения высказал :)
← →
DevilDevil © (2013-01-09 16:05) [11]> Kerk © (09.01.13 15:42) [10]
а теперь представь как делался проект LuaJIT )
и делался он если не ошибаюсь одним человеком
и в его распоряжении был не мегабыстрый и удобный Delphi, а мегамедленный, без RTTI - С++
это я к чему говорю. Оно того стоит.
попробуй вкусить прелесть скриптов в нативном проекте. И попробуй в качестве скриптов сначала заюзать PascalScript, потом Lua (через CrystalLUA). Многое для тебя станет ясно
ну и потом я ищу человека, не для полной реализации механизма автобиндинга. А для парсинга параметров из строки. Может быть какую-то архитектурку этому продумает. В общем только часть работ. :)
← →
DevilDevil © (2013-01-10 16:50) [12]Удалено модератором
Примечание: Бессмсленное сообщение
← →
Pavia © (2013-01-10 21:20) [13]
> ну и потом я ищу человека, не для полной реализации механизма
> автобиндинга. А для парсинга параметров из строки. Может
> быть какую-то архитектурку этому продумает. В общем только
> часть работ. :)
Архитектура она лежит ниже. В виде структур в которые заносить результаты парсинга. А парсинг это просто большой набор функций которые выполняют крошечный разбор. Такой вот своеобразные рекурсивный парсинг.
← →
DevilDevil © (2013-01-11 01:42) [14]> Pavia © (10.01.13 21:20) [13]
принципиально речь не только о парсинге. Тут более фундаментальный вопрос - делегирование части работы. Распарсенную информацию нужно определённым образом хранить. И было бы здорово, если бы часть работ по реализации автобиндинга так же была отдана на сторону. Потому что одному тяжело тянуть такой проект.
← →
Artem (2013-01-13 18:42) [15]Пишу диплом на эту тему.
← →
Artem (2013-01-13 18:43) [16]А если честно - не разбираюсь...
← →
RDen © (2013-01-13 20:00) [17]>Artem (13.01.13 18:42) [15]
>Пишу диплом на эту тему.
>Artem (13.01.13 18:43) [16]
>А если честно - не разбираюсь...
а вот это у же чисто Российский подход к решению - молодца, что осознаёшь
← →
DevilDevil © (2013-01-13 21:25) [18]> Artem (13.01.13 18:42) [15]
по какой теме ?
кстати парсить надо объявление функции, а не произвольный паскаль-код )
← →
Artem (2013-01-13 21:38) [19]
> DevilDevil © (13.01.13 21:25) [18]
>
> > Artem (13.01.13 18:42) [15]
>
> по какой теме ?
>
> кстати парсить надо объявление функции, а не произвольный
> паскаль-код )
Парсинг программы на Паскале в программу на учебном ассемблере.
← →
DevilDevil © (2013-01-13 22:17) [20]ого
ну и как успехи ?
← →
Artem (2013-01-13 23:23) [21]
> DevilDevil © (13.01.13 22:17) [20]
>
> ого
> ну и как успехи ?
Накатал что-то на Delphi. Пока без процедур, функций, break, continue и "диапазонного" типа. Вроде работает. Пока не тестировал код результата. Делал все по-свойму. Сейчас буду допиливать.
← →
DevilDevil © (2013-01-13 23:29) [22]круто-круто
вот чуваку на другом форуме ответил чуваку.
посмотри
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=995644&msg=13760081
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=995644&msg=13762298
← →
Германн © (2013-01-14 01:43) [23]
> Artem (13.01.13 21:38) [19]
>
>
> > DevilDevil © (13.01.13 21:25) [18]
> >
> > > Artem (13.01.13 18:42) [15]
> >
> > по какой теме ?
> >
> > кстати парсить надо объявление функции, а не произвольный
> > паскаль-код )
>
> Парсинг программы на Паскале в программу на учебном ассемблере.
>
А что за "учебный ассемблер"?
Какие требования к данному компилятору? В частности есть ли требование "однопроходности"?
> DevilDevil © (13.01.13 22:17) [20]
>
> ого
Не "ого", но вполне хорошая тема для диплома, имхо.
← →
Artem (2013-01-14 19:50) [24]
>
> А что за "учебный ассемблер"?
> Какие требования к данному компилятору? В частности есть
> ли требование "однопроходности"?
Я не правильно выразился - транслятор. на выходе текстовой файл с командами ассемблера...
← →
Фокс Йожин (2013-01-14 21:42) [25]
> Vegeta (09.01.13 14:07) [3]
>
> Даже не надейся.
Ну почему же. Может, у кого-то ностальгия по тёплому ламповому Паскалю.
← →
Artem (2013-01-14 22:20) [26]
> круто-круто
>
> вот чуваку на другом форуме ответил чуваку.
> посмотри
> http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=995644&msg=13760081
> http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=995644&msg=13762298
Здорово. Но там для объектно-ориентированной Delphi. А у меня Pascal Вирта...
← →
Pavia © (2013-01-14 22:33) [27]Паскаль Вирта. Это курсовая работа.
Там описание 30 страниц. Очень простой язык.
← →
Artem (2013-01-14 23:20) [28]
> Pavia © (14.01.13 22:33) [27]
>
> Паскаль Вирта. Это курсовая работа.
> Там описание 30 страниц. Очень простой язык.
3000 строк пока получилось... Еще надо доделать. + Ассемблер... В любом случае тему приняли к рассмотрению)
← →
Artem (2013-01-14 23:22) [29]И к тому ассемблеру (далеко не x86) объектно-ориентированный транслятор сделать тяжело, ИМХО... Там даже стековых команд нет...
← →
Artem (2013-01-15 00:06) [30]Чего-то я действительно не в тему лапшу несу... Забыл о чем речь. И проект мой убог...
← →
Германн © (2013-01-15 02:13) [31]
> Artem (14.01.13 23:22) [29]
>
> И к тому ассемблеру (далеко не x86) объектно-ориентированный
> транслятор сделать тяжело, ИМХО... Там даже стековых команд
> нет...
>
<OFFTOP>
Просто ради любопытства. Дай ссылку или само описание того ассемблера, в котором нет стековых команд на мою почту в анкете.
</OFFTOP>
← →
DevilDevil © (2013-01-15 09:47) [32]> Artem
> Здорово. Но там для объектно-ориентированной Delphi. А у меня Pascal Вирта...
Не ты не понял.
там нужно распарсивать объявление функции.
например так:"function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;"
т.е.
1) функция/метод
2) соглашение о вызове
3) тип результата (если функция)
4) для каждого параметра определить опции, имя, тип (во внутреннем формате)
← →
Artem (2013-01-15 17:10) [33]
>
> > Artem (14.01.13 23:22) [29]
> >
> > И к тому ассемблеру (далеко не x86) объектно-ориентированный
> > транслятор сделать тяжело, ИМХО... Там даже стековых команд
> > нет...
> >
>
> <OFFTOP>
> Просто ради любопытства. Дай ссылку или само описание того
> ассемблера, в котором нет стековых команд на мою почту в
> анкете.
> </OFFTOP>
Это называется ассемблер Бека.
← →
Anatoly Podgoretsky © (2013-01-15 17:58) [34]Ну например ассемблер IBM-360, разработчика сослали в американский аналог русской Сибири навечно.
← →
Pavia © (2013-01-15 18:19) [35]
> Ну например ассемблер IBM-360, разработчика сослали в американский
> аналог русской Сибири навечно.
Да уж! Зато там других команд была куча.
← →
Pavia © (2013-01-15 18:21) [36]
> разработчика сослали
А можно пруф линк, а то любителю IBM-360 хочу показать.
← →
Игорь Шевченко © (2013-01-15 19:44) [37]Anatoly Podgoretsky © (15.01.13 17:58) [34]
Ностальгия. Стэбли, Джермейн...
Макрофичи там были здорово развиты
← →
Rouse_ © (2013-01-15 19:54) [38]
> Игорь Шевченко © (15.01.13 19:44) [37]
> Макрофичи там были здорово развиты
"Макрофичи" современных "поразвитей" будут :) TLS-callback или полиморфик простейший вообще на коленке можно сделать без стороннего вмешательства :)
← →
Rouse_ © (2013-01-15 19:55) [39]ЗЫ: имеется ввиду прямо на этапе компиляции...
← →
Sha © (2013-01-15 20:38) [40]> Anatoly Podgoretsky © (15.01.13 17:58) [34]
> Ну например ассемблер IBM-360,
> разработчика сослали в американский аналог русской Сибири навечно.
так ведь там в железе не было push/pop
← →
Anatoly Podgoretsky © (2013-01-15 21:27) [41]> Sha (15.01.2013 20:38:40) [40]
Вот за это и пострадал бедняжка.
← →
Inovet © (2013-01-15 21:34) [42]> [40] Sha © (15.01.13 20:38)
> так ведь там в железе не было push/pop
Мелкосхемы экономили?
← →
Игорь Шевченко © (2013-01-15 21:48) [43]Inovet © (15.01.13 21:34) [42]
Стек позже изобрели
← →
Sha © (2013-01-15 22:48) [44]изобрели-то раньше, но в железе реализовали позже
← →
Artem (2013-01-15 22:52) [45]
> Германн © (15.01.13 02:13) [31]
>
>
> > Artem (14.01.13 23:22) [29]
> >
> > И к тому ассемблеру (далеко не x86) объектно-ориентированный
> > транслятор сделать тяжело, ИМХО... Там даже стековых команд
> > нет...
> >
>
> <OFFTOP>
> Просто ради любопытства. Дай ссылку или само описание того
> ассемблера, в котором нет стековых команд на мою почту в
> анкете.
> </OFFTOP>
Отправил
← →
Artem (2013-01-15 22:53) [46]Отпишитесь плиз...
← →
DevilDevil © (2013-01-15 23:38) [47]я хотел бы попросить участников ветки не разводить офтоп
← →
Anatoly Podgoretsky © (2013-01-16 03:05) [48]> DevilDevil (15.01.2013 23:38:47) [47]
В потрепаться то?
← →
DevilDevil © (2013-01-16 09:27) [49]> Anatoly Podgoretsky © (16.01.13 03:05) [48]
трепаться можно на тему ветки, а можно на свою
то, что не связано или слабо связано с темой ветки - называется офтоп
и я попрошу его здесь не разводить
← →
БарЛог © (2013-01-17 15:24) [50]DevilDevil ©
Вот как надо делать :)
http://www.securitylab.ru/news/436276.php
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2013.05.26;
Скачать: [xml.tar.bz2];
Память: 0.58 MB
Время: 0.003 c