Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2013.05.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.003 c
15-1356861362
Пит
2012-12-30 13:56
2013.05.26
Вирусы в браузерах


4-1265154894
Vincent
2010-02-03 02:54
2013.05.26
Может ли EnumProcessModules не находить всех подключенных DLL?


15-1358417071
cmexx
2013-01-17 14:04
2013.05.26
adobe reader


15-1355934720
Дмитрий С
2012-12-19 20:32
2013.05.26
На что поменять firefox?


15-1358202621
alexdn
2013-01-15 02:30
2013.05.26
Вот интересно





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский