Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.05.26;
Скачать: CL | DM;

Вниз

Ищу энтузиаста, который умеет парсить паскаль-код   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.009 c
8-1231523798
inviz
2009-01-09 20:56
2013.05.26
изменение скорости вращения привода


15-1358457739
Vagner
2013-01-18 01:22
2013.05.26
Посоветуйте фильмы


2-1351502789
i2e
2012-10-29 13:26
2013.05.26
цвет заливки в excel


2-1351605492
LDV
2012-10-30 17:58
2013.05.26
поставить Breakpoint


2-1351505552
0xFFFFFFFF
2012-10-29 14:12
2013.05.26
расположение компонентов