![]() |
|
![]() ![]() ![]() |
|
Foror |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 14.2.2004 Репутация: нет Всего: 2 |
Сейчас мне нужно создать язык с помощью которого мне будет проще вытаскивать данные из таблиц и расскидывать эти данные по нужным объектам с учетом связей между ними. Весь проект разрабатывается на пхп5, также учитывается важное условие, чем меньше не стандартных модулей тем лучше. Было бы конечно здорово, если бы нашлось решение типа связки bison+lex, но если так не получится, то мне было бы интересно узнать каким образом оптимальнее будет пропарсить метаязык создав дерево для дальнейшего разбора.
Вот пример метаязыка: [Aritcle] ( id, title, content, author->[Author] ( id, name, rating-<[Rating](plus, minus), groups<->[UserGroup] ( id, name, permissions<->[Permission](id, permission) ) ), comments->[Comment](id, content, author->[Author] as [Author2](id, name)), categories<->[Category](id, name, categories<->[Category] as [Category2](id, name)), rating-<[Rating](plus, minus), topic.inherit->[Topic](id, name) ) ->, -<, <-> указывают связи между объектами Пример использования на практике: SELECT [Aritcle] ( id, title, content, author->[Author] ( id, name, rating-<[Rating](plus, minus), groups<->[UserGroup] ( id, name, permissions<->[Permission](id, permission) ) ), comments->[Comment](id, content, author->[Author] as [Author2](id, name)), categories<->[Category](id, name, categories<->[Category] as [Category2](id, name)), rating-<[Rating](plus, minus), topic.inherit->[Topic](id, name) ) FROM articles Article LEFT JOIN authors as Author ON Author.id = Article.id_author LEFT JOIN authors_users_groups ON authors_users_groups.id_author = Author.id LEFT JOIN users_groups as UserGroup ON authors_users_groups.id_user_group = UserGroup.id LEFT JOIN users_groups_permissions ON users_groups_permissions.id_user_group = UserGroup.id LEFT JOIN permissions as Permission ON users_groups_permissions.id_premission = Permission.id LEFT JOIN comments Comment ON Comment.id_article = Article.id LEFT JOIN authors as Author2 ON Comment.id_author = Author2.id LEFT JOIN articles_categories ON articles_categories.id_article = Article.id LEFT JOIN categories as Category ON articles_categories.id_category = Category.id LEFT JOIN categories as Category2 ON Category.id_parent = Category2.id; --------------------
Разработка веб-сайтов и создание интернет магазина |
|||
|
||||
Empirik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 28.10.2005 Где: Россия, Пермь Репутация: нет Всего: 1 |
Если я правельно тебя понял, то ты хочешь объяснить программе как твои объеты храняться в нутри базы данных, тоесть как объекта привязанны к полям в нутри таблиц базы данны. Это так?
--------------------
Постоянно удивляюсь человеческой фантазии напридумывают гаджетов |
|||
|
||||
Foror |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 14.2.2004 Репутация: нет Всего: 2 |
Да, если что я в курсе, что это называется ORM, а также про propel и прочее(хотя не против выслушать критику про убогость такого решения
![]() Хотя я вообще в дальнейшем планирую просто кешировать каждый такой запрос и тогда производительность парсинга будет не важна. Тогда как сделать проще, можно даже в ущерб производительности? ![]() --------------------
Разработка веб-сайтов и создание интернет магазина |
|||
|
||||
Foror |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 14.2.2004 Репутация: нет Всего: 2 |
Уфф хотел всё замутить через рекурсивную регулярку, но жестого побрился
![]() ![]() preg_match_all('/([A-Za-z0-9_|\.]+)([\->|<\->|\-<]+)(\[[A-Za-z0-9_|\s]+\])/', $query, $lexemes, PREG_OFFSET_CAPTURE); $amount_lexemes = count($lexemes[0]); for ($i = $amount_lexemes - 1; $i >= 0 ; $i--) { $length_lexeme = strlen($lexemes[0][$i][0]); preg_match('/\([^()]+\)/', $query, $test, PREG_OFFSET_CAPTURE, $lexemes[0][$i][1] + $length_lexeme); for ($j = $test[0][1]; $j < $test[0][1] + strlen($test[0][0]); $j++) $query[$j] = ''; } --------------------
Разработка веб-сайтов и создание интернет магазина |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |