А кто-нибудь пробовал написать СУБД?

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

А кто-нибудь пробовал написать СУБД?

Сообщение SLIM » 10.12.2008 (Ср) 15:11

Интересно кто-нибудь пробовал написать СУБД вообще?
>>>После того как кто-то ответит>>>а возможно ли на VB?

Достаточно интересная область знаний. Интересно всетки, может кто-нибудь задавался идеей? М?
Пишите жизнь на чистовик.....переписать не удастся.....

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: А кто-нибудь пробовал написать СУБД?

Сообщение MIT » 10.12.2008 (Ср) 15:31

Написать полноценное СУБД - проблема, причем большая. А сделать свою систему еще и конкурентноспособной почти нереально. Однако я переодически сталкиваюсь с задачами хранения бинарных данных, и обычно под каждую задачу пишу систему хранения. Последнее время использую одну, периодически "прикручивая" к ней новые возможности.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: А кто-нибудь пробовал написать СУБД?

Сообщение Хакер » 10.12.2008 (Ср) 15:35

Никто не пытался, и правильно, что не пытался.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: А кто-нибудь пробовал написать СУБД?

Сообщение Williams » 10.12.2008 (Ср) 17:24

Пробовать можно, но имхо без требуемого уровня знаний в данной области быстродействие будет убогое. Проще обойтись файловой системой - да и зачем изобретать велосипед.
И вы думаете, что вас оставят в живых после прочтения этого поста?

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: А кто-нибудь пробовал написать СУБД?

Сообщение SLIM » 10.12.2008 (Ср) 18:54

MIT писал(а):Написать полноценное СУБД - проблема, причем большая. А сделать свою систему еще и конкурентноспособной почти нереально. Однако я переодически сталкиваюсь с задачами хранения бинарных данных, и обычно под каждую задачу пишу систему хранения. Последнее время использую одну, периодически "прикручивая" к ней новые возможности.

Эх....
Хакер писал(а):Никто не пытался, и правильно, что не пытался.
Никто не пытался, и правильно, что не пытался.

Это еще почему? Считаешь утопичным?
Williams писал(а):Пробовать можно, но имхо без требуемого уровня знаний в данной области быстродействие будет убогое. Проще обойтись файловой системой - да и зачем изобретать велосипед.

Ну и какой уровень знаний нужен по-твоему?
На мой взгляд:
1. Отлично знать язык на котором пишешь
2. Отлично знать систему под которой будет работать СУБД
3. Отлчино знать основы посторения хотя бы одного вида БД, например реляционной модели. Знать основы реляционной алгебры (исчисления)(есть много трудов по этому поводу, самый знаменитый из них (теоретически конечно) труд Кодда и насколько знаю этот труд реализован сейчас во всех СУБД в разной степени). Владеть особыми математическими понятиями как например множества и т.д. Возможно что-то еще.

Для чего? Да просто надоедает иногда смотреть например на знаменитые бух. программы автоматизации (такие деньги грести непонятно за что).
Есть (есть!!!!) еще рыцари на белом свете. Например почему бы и не попробовать. Допустим у меня возникла идея о создании СУБД (хотя бы самой простой) для написания в последующем дипломного проекта. Так как это будет через 5 лет только- времени у меня достаточно. Накупить книжек по данному вопросу + интернет + голова + возможные братья по идее + кто-то подскажет/поможет. Всем миром как говорится....
Ну как-то ведь создавали СУБД-шки? Они ведь не с самого начала были супер пупер быстрые и крутые. Тот же Oracle - одна из первых СУБД, но какая ужасная была по началу, а теперь вон самая дорогая....Да куча примеров.
А вспомним знакомого многим Линуса Торвальдса, который начитался Эндрю Таненбаума, занялся разработкой ядра ОС, а когда немного хоть что-то сделал появилось это:
Я делаю (бесплатную) операционную систему (это всего лишь хобби, и она
не будет большой и профессиональной как gnu) для клонов 386(486) AT.
Работа над ней началась в апреле и скоро будет закончена. Я бы хотел
получить отзывы о том, что людям нравится/не нравится в миниксе, ибо
моя ОС на неё похожа (такое же устройство файловой системы
(из практических соображений) среди всего прочего).

Я уже перенёс bash(1.08) и gcc(1.40), и всё, кажется, работает.
Подразумевается, что практические вещи у меня появятся через несколько
месяцев, и я хотел бы узнать, каких особенностей хотелось бы большинству.
Любые предложения принимаются, но я не обещаю, что реализую их :-)

Линус (torvalds@kruuna.helsinki.fi)

PS. Да, у неё нет никакого миниксовского кода, и у неё есть многопоточная
фс. Она НЕ переносима (применяет переключение задач 386-го, и т. д.), и,
вероятно, никогда не будет поддерживать ничего, кроме жёстких дисков
AT, т.к. это всё, что у меня есть :-(.


Вот так появился Линукс. А ведь Он был всего лишь студентом....
Да я не притендую на такую высокую степень, но всеж попробовать всегда стоит....главное как говорится плечо саратников по делу
Пишите жизнь на чистовик.....переписать не удастся.....

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: А кто-нибудь пробовал написать СУБД?

Сообщение alibek » 10.12.2008 (Ср) 20:59

SLIM, ты хотя бы парсер SQL-запросов напиши, а потом уже будешь думать о написании СУБД.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: А кто-нибудь пробовал написать СУБД?

Сообщение tyomitch » 10.12.2008 (Ср) 21:45

Всякий проект имхо должен начинаться с мысли: а зачем?

Если есть какая-то свежая мысль, ещё не пришедшая в голову писателям существующих СУБД, то грех не попробовать её реализовать. Хоть на VB, хоть на чём, только чтоб впаривать (разработчикам, рецензентам диплома, инвесторам, etc) не абстрактные рассуждения, а работоспособный пример.

Если просто руки чешутся написать что-нибудь эдакое, "такое же как у всех, только другое", то это конечно лучше других способов убить время, но ненамного плодотворнее. Хотя проведение досуга -- дело личное, "каждый ...чит как он хочет" (ц)
Изображение

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: А кто-нибудь пробовал написать СУБД?

Сообщение Debugger » 10.12.2008 (Ср) 21:51

Я, помню, писал ДБ для обращений к текстовой базе на удаленном компьютере (о как!). Чисто из интереса. Не дописал. Однако что-то получилось - http://www.vbstreets.ru/VB/Sources/66452.aspx

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: А кто-нибудь пробовал написать СУБД?

Сообщение SLIM » 10.12.2008 (Ср) 22:20

alibek писал(а):SLIM, ты хотя бы парсер SQL-запросов напиши, а потом уже будешь думать о написании СУБД.

А что, интересная мысль. Почему бы и нет. Может угостишь линком для начала? :alien:
tyomitch писал(а):Если просто руки чешутся написать что-нибудь эдакое, "такое же как у всех, только другое", то это конечно лучше других способов убить время, но ненамного плодотворнее. Хотя проведение досуга -- дело личное, "каждый ...чит как он хочет" (ц)

Ну откуда у меня свежие идеи? Я ведь имею очень поверхностное представление обо всем этом, просто заинтересовался.
Помнится подпись у меня была такая помните (было что-то типа) :"Все знают что то-то и то-то невозможно. Но находятся чудаки которые этого не знают - вот они и делают открытие. А.Эйнштэйн"
Тем более что я программистом пока не работаю, работой меня не нагружают. Что лучше - писать что-то или не писать ничего....))))
Пишите жизнь на чистовик.....переписать не удастся.....

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: А кто-нибудь пробовал написать СУБД?

Сообщение tyomitch » 10.12.2008 (Ср) 23:31

SLIM писал(а):Ну откуда у меня свежие идеи? Я ведь имею очень поверхностное представление обо всем этом, просто заинтересовался.
Помнится подпись у меня была такая помните (было что-то типа) :"Все знают что то-то и то-то невозможно. Но находятся чудаки которые этого не знают - вот они и делают открытие. А.Эйнштэйн"

Если ты не имеешь в теме никакого представления, то как ты сделаешь открытие? Наткнёшься на него и даже не заметишь.

SLIM писал(а):Тем более что я программистом пока не работаю, работой меня не нагружают. Что лучше - писать что-то или не писать ничего....))))

Лучше писать осмысленное, чем бессмысленное ;-)

Т.е. начать с того, чтобы разобраться, что именно ты собрался писать.
Линукс ведь не так получился, что сел человек писать абы-что и вдруг у него вышла ОС.
Изображение

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: А кто-нибудь пробовал написать СУБД?

Сообщение SLIM » 10.12.2008 (Ср) 23:45

tyomitch писал(а):Если ты не имеешь в теме никакого представления, то как ты сделаешь открытие? Наткнёшься на него и даже не заметишь.

Эх...да не собираюсь я открытия делать. Просто для того чтобы придумать что-то новое, нужно досконально знать старое.
tyomitch писал(а):Лучше писать осмысленное, чем бессмысленное ;-)

Т.е. начать с того, чтобы разобраться, что именно ты собрался писать.
Линукс ведь не так получился, что сел человек писать абы-что и вдруг у него вышла ОС.

Таки да.....
Остановимся пока на том что предложил большой человек. На SQL-парсер.
Я тут погуглил погуглил - так и не вкурил практического применения. Для чего? Просто проверка синтаксиса и выявление ошибок? В этом будет весь функционал парсера? :oops: :oops: :oops: :oops:

[Добавлено ] Кто участник форума "На исходниках" пожалуста скачайте мне файлик с топика http://forum.sources.ru/index.php?showtopic=118797 , а то регистрироваться не хочется
Пишите жизнь на чистовик.....переписать не удастся.....

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: А кто-нибудь пробовал написать СУБД?

Сообщение Antonariy » 10.12.2008 (Ср) 23:55

tyomitch писал(а):Т.е. начать с того, чтобы разобраться, что именно ты собрался писать.
Линукс ведь не так получился, что сел человек писать абы-что и вдруг у него вышла ОС.
В определенном смысле именно так и получилось. Он начал писать bbs-клиента, который грузился с дискеты. Сначала была только система ввода-вывода (клавиатура, дисплей) и доступ к сети, потом появился доступ к дискам и прочие перламутровые пуговицы типа работы с портами, и оказалось, что функционала накопилось достаточно для операционной системы.

Однако, да, писал он не абы что, а конкретный инструмент конкретно для себя для конкретной работы.
Лучший способ понять что-то самому — объяснить это другому.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: А кто-нибудь пробовал написать СУБД?

Сообщение SLIM » 11.12.2008 (Чт) 0:04

Ну расскажите мне лучше (грубо говоря поставьте задачу (гы руки чешутся)) про прасер SQL. Что он делать должен то?
Пишите жизнь на чистовик.....переписать не удастся.....

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: А кто-нибудь пробовал написать СУБД?

Сообщение iGrok » 11.12.2008 (Чт) 1:56

SLIM писал(а):Ну расскажите мне лучше (грубо говоря поставьте задачу (гы руки чешутся)) про прасер SQL. Что он делать должен то?

Для начала хотя бы просто разбирать SQL-запрос. Что выбрать, откуда выбрать, с какими условиями выбрать. Ну или что, куда, и с какими условиями вставлять/удалять/обновлять. Если будет нормальный парсер - уже не так уж и трудно будет прикрутить к нему свой формат хранения данных.
На полдиплома(а где-то и на целый) в принципе потянет. =)

Начать можно вообще только с SELECT ... FROM ... WHERE ... ORDER BY. Потом всякие там JOIN'ы, DISTINCTы..
label:
cli
jmp label

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: А кто-нибудь пробовал написать СУБД?

Сообщение Antonariy » 11.12.2008 (Чт) 10:16

"Что, откуда" — это когда уже есть ядро. Сначала нужно сделать так, чтобы не прокатывали конструкции типа select * from Table1 from where x=y
Лучший способ понять что-то самому — объяснить это другому.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: А кто-нибудь пробовал написать СУБД?

Сообщение jangle » 11.12.2008 (Чт) 10:21

Остановимся пока на том что предложил большой человек. На SQL-парсер.
Я тут погуглил погуглил - так и не вкурил практического применения. Для чего? Просто проверка синтаксиса и выявление ошибок? В этом будет весь функционал парсера?


SQL парсер уже крайне сложная задача, на реализацию с нуля могут уйти недели и даже месяцы напряженной работы.
Поэтому лучше взять готовый, например GoldParser - http://www.devincook.com/goldparser/index.htm
Подключается к VB проекту, в виде ActiveX DLL, доступны исходники и готовая грамматика для ANSI SQL
http://www.devincook.com/goldparser/grammars/index.htm

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: А кто-нибудь пробовал написать СУБД?

Сообщение SLIM » 11.12.2008 (Чт) 13:24

Все ясно. Спасибо. Приступлю к работе....
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: А кто-нибудь пробовал написать СУБД?

Сообщение Хакер » 11.12.2008 (Чт) 13:35

Делать нечего.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: А кто-нибудь пробовал написать СУБД?

Сообщение SLIM » 11.12.2008 (Чт) 19:11

Хакер писал(а):Делать нечего.

По сути да
Пишите жизнь на чистовик.....переписать не удастся.....

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: А кто-нибудь пробовал написать СУБД?

Сообщение Andrey Fedorov » 15.12.2008 (Пн) 16:45

jangle писал(а):SQL парсер уже крайне сложная задача, на реализацию с нуля могут уйти недели и даже месяцы напряженной работы.
Поэтому лучше взять готовый, например...


А почему тогда сразу не тот-же бесплатный SQL-Express? Нет уж - с нуля так с нуля. И со своим синтаксисом :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Re: А кто-нибудь пробовал написать СУБД?

Сообщение Matew » 16.12.2008 (Вт) 3:51

SLIM, если уж писать, то что-то вроде:
http://ru.wikipedia.org/wiki/Tutorial_D
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

arechemist
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 173
Зарегистрирован: 24.10.2003 (Пт) 8:45

Re: А кто-нибудь пробовал написать СУБД?

Сообщение arechemist » 22.01.2009 (Чт) 1:25

Хы ) как успехи у афтора? )

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: А кто-нибудь пробовал написать СУБД?

Сообщение SLIM » 27.01.2009 (Вт) 1:46

arechemist писал(а):Хы ) как успехи у афтора? )

Успехи следующие.
С приходом сессии всем стала нужна программа для решения lim, integral, diff.
Скооперировавшись с одногрупниками мы решили написать программу для вычисления пошагово сабжа. Парсер с меня.
Поэтому у меня зародилась идея универсального парсера.
Вот как только напишу парсер под мат., сразу присяду за универсальный.

Кстати саму программу можно будет лицезреть, но позже
Пишите жизнь на чистовик.....переписать не удастся.....

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: А кто-нибудь пробовал написать СУБД?

Сообщение MIT » 27.01.2009 (Вт) 2:15

Имхо математических парсеров и так целая куча, не думаю, что есть смысл писать тоже самое еще раз. Кстати, а что ты подразумеваешь под универсальностью?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: А кто-нибудь пробовал написать СУБД?

Сообщение Williams » 27.01.2009 (Вт) 2:38

SLIM писал(а):С приходом сессии всем стала нужна программа
Скооперировавшись с одногрупниками мы решили написать с меня.
как только мат., сразу присяду
можно будет лицезреть, но позже


"От сессии до сессии студенты живут весело" ©
И вы думаете, что вас оставят в живых после прочтения этого поста?

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: А кто-нибудь пробовал написать СУБД?

Сообщение SLIM » 28.01.2009 (Ср) 2:02

MIT писал(а):Имхо математических парсеров и так целая куча, не думаю, что есть смысл писать тоже самое еще раз

Это да, но раз уж возникла идея написать парсер почему бы самому не наступить тысячу раз на грабли и сделать это самому. Пусть есть. Будет еще один... :alien:
MIT писал(а):Кстати, а что ты подразумеваешь под универсальностью?

А вот под уиниверсальностью я понимаю следующее - зачем писать парсер под определенные нужды каждый раз...сегодня математический, завтра SQL, послезавтра XML....можно ведь сделать универсальный....

Идея на данном этапе (данный этап является нулевым конечно же) заключается в следующем. Универсальный парсер может создавать некую БД токенов. Там же оговариваются условия "токенизации". Например: в инструкции SQL оговорены токены Select,All, From, Where. Ну это например. Туда же добавляем токены "(", "(", ",". ";","." . Оговариваем условия что типа: "Перед Select нет ни одного токена, а после него идет либо два произвольных слова разделенные точкой, либо токен All, либо "*" либо просто произвольный токен....что если после токена Where стоит токен "(", то после очереди токенов должен обязательно стоять токен ")"......ну и так далее ".

Таким образои распишем где и что должно стоять на местах. Далее идет стандартная процедура разбиения на токены и анализ.

Подобные парсеры тоже существуют. Даже больше скажу,думаю что у Хакера и Темыча они есть. Вспомним хотя бы Хакерский second hend и ту самую библу. Это по-видимому часть пусть и не универсального, но парсера, которую можно применить к универсальному парсеру....


Правильно говорят - если что-то делаешь, то задайся вопросом зачем.....но вот подумайте граждане, что еще не сделано? Да помоему уже все есть. Так что просто учимся делать сами....


Williams писал(а):"От сессии до сессии студенты живут весело" ©

Даа.....чуть позже я подробно в блоге напишу про эту незабываемую сессию....ужас. Мой универ занимает 26 место по России, а учат.......пипец просто чему
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: А кто-нибудь пробовал написать СУБД?

Сообщение Хакер » 28.01.2009 (Ср) 3:06

Идея на данном этапе (данный этап является нулевым конечно же) заключается в следующем. Универсальный парсер может создавать некую БД токенов. Там же оговариваются условия "токенизации". Например: в инструкции SQL оговорены токены Select,All, From, Where. Ну это например. Туда же добавляем токены "(", "(", ",". ";","." . Оговариваем условия что типа: "Перед Select нет ни одного токена, а после него идет либо два произвольных слова разделенные точкой, либо токен All, либо "*" либо просто произвольный токен....что если после токена Where стоит токен "(", то после очереди токенов должен обязательно стоять токен ")"......ну и так далее ".

Дело в том, что многие языки настолько сложны (в плане грамматики), что не могут быть описаны такими вот правилами. А то, что описываешь ты, по сути — регулярные выражения.

Вот твой пример:
Перед Select нет ни одного токена, а после него идет либо два произвольных слова разделенные точкой, либо токен All, либо "*"

и вот он же в виде регулярного выражения:
Код: Выделить всё
^select (all|\*|\w+\.\w+)


Но на деле же оказывается, что большинство языков нельзя разобрать используя regexp-ы. Более того, то, что ты сейчас написал, вызывает подозрение о неполном знании SQL (это не упрек, я его, например, тоже не досканально знаю).

У тебя получается может быть либо select all, либо select *, либо select table1.field1?
А [select distinct ...] ?
А [select database1.table1.* ...] ?
А [select count(somefield) ...] ?
А [select (field1 + field2) / field3 ...] ?
А [select (database1.table2.field3 / (select `course` from `courses_of_exchange` where `c_from` = 'EUR' and `c_to` = 'RUR')) as `price_in_roubles` ...] ?

И это только селект.
Таким образои распишем где и что должно стоять на местах. Далее идет стандартная процедура разбиения на токены и анализ.

Разбиение — это очень сложно. Чтобы правильно разбить, нужно обработать полностью.

Вот например VB-код. Чтобы разбить его на statement-ы, нельзя просто взять и сделать Split(..., vbCrLf). Во-первых, vbCrLf не всегда означает конец statement-а, если перед CRLF стоит символ _ , то данный CRLF не является концом Statement-а. Во-вторых, Statement заканчивается не только на CRLF, а ещё двоеточие может разделять statement-ы.

Предположим, у нас VB-шный сплит понимал бы рег. выражения. Но мы всё равно не могли бы заюзать (\r\n|:) в качестве разделителя. Потому что двоеточике не всегда однозначно делит два statement-а. Оно может быть элементом конструкции := (при передачи некоторых именованых аргументов), оно может быть концом метки, не говоря уже о том, что оно может находиться внутри строки.

Возвращаясь к CRLF, то там символ _ будет подавлять CRLF только в том случае, если это отдельный символ, а не часть идентификатора (например CallMe_ ).

Я это к тому, что разобрать код, написанный на каком-то языке, не так просто, как кажется. А сделать универсальный разборщик — втройне.

Подобные парсеры тоже существуют. Даже больше скажу,думаю что у Хакера и Темыча они есть.

Насчёт Тёмыча не знаю, но у Хакера парсер работает совсем не так.
Вспомним хотя бы Хакерский second hend и ту самую библу.

Та библа — уналая фигня, по сравнению с тем, что имеет (т.е. во что развил ту идею) Хакер сейчас. Его парсер (это и парсером-то назвать сложно) это скорее машина Тьюринга, что-то похожее на виртуальный процессор, способный выполнять код (т.е. набор инструкций). В качестве этого кода выступают входные данные, причём они могут быть любыми, и в качестве инструкций могут выступать не только символы (байты), а произвольный кусски данных, вплоть до отдельных битов. Правила, по которым входящие данные (они же — код, для виртуального процессора) будут "выполняться" задаются вначале и могут перестраиваться по ходу работы.

Таким образом, можно обрабатывать любые последовательные данные с нечеткой структурой, такие как обычный текст, код программы, исполняемый код, любым образом. Имея большой словарь, можно так выстроить правила, что входящие слова будут интерпретироваться как код, заставляющий виртуальный процессор молниеносно перемещаться по этому словарю, отыскивая таким образом в нём слово (которое испльзуется как выходные данные). И вот именно этот частный случай применения этой технологии и реализован в той библе, которая "секонд-хенд".) Можно построить правила выполнения так, что входящие данные будут использоваться для построения списка токенов. Тогда подавая на вход некий код (например VB-код), мой "парсер" будет, исполняя его (не по законам VB исполняя, естественно), строить список токенов, т.е. по сути — будет разбирать VB-код на токены.

Можно задать свои правила и для разбора x86-native-кода, и таким образом получить дизассемблер x86-кода (что я и сделал благополучно). Стоит сейчас его чуть-чуть переделать (вместо составления списка x86-инструкций — выполнять их), и мы получим эмулятор x86-процессора.

А можно задать очень простые правила (всего 4 штуки, для 4 букв U, L, R, D) и мой "парсер" (парсер ли?) будет управлять движением черепашки на экране, принимая в качестве входных данных примерно такой поток: "RURURUDDDDDDULULURRRRRRRRRRR" (черепашка нарисует стрелочку).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: А кто-нибудь пробовал написать СУБД?

Сообщение tyomitch » 28.01.2009 (Ср) 16:02

SLIM писал(а):
MIT писал(а):Кстати, а что ты подразумеваешь под универсальностью?

А вот под уиниверсальностью я понимаю следующее - зачем писать парсер под определенные нужды каждый раз...сегодня математический, завтра SQL, послезавтра XML....можно ведь сделать универсальный....

Идея на данном этапе (данный этап является нулевым конечно же) заключается в следующем. Универсальный парсер может создавать некую БД токенов. Там же оговариваются условия "токенизации". Например: в инструкции SQL оговорены токены Select,All, From, Where. Ну это например. Туда же добавляем токены "(", "(", ",". ";","." . Оговариваем условия что типа: "Перед Select нет ни одного токена, а после него идет либо два произвольных слова разделенные точкой, либо токен All, либо "*" либо просто произвольный токен....что если после токена Where стоит токен "(", то после очереди токенов должен обязательно стоять токен ")"......ну и так далее ".

Таким образои распишем где и что должно стоять на местах. Далее идет стандартная процедура разбиения на токены и анализ.

Гениально. Такое описание языка называется грамматикой. (Она может быть рекурсивной и в этом принципиально сложнее регэкспа.)
Для грамматик есть стандартные форматы, и есть "общепринятые" тулзы, которые по грамматике генерируют парсер.


SLIM писал(а):Подобные парсеры тоже существуют. Даже больше скажу,думаю что у Хакера и Темыча они есть. Вспомним хотя бы Хакерский second hend и ту самую библу. Это по-видимому часть пусть и не универсального, но парсера, которую можно применить к универсальному парсеру....

Я свой "универсальный парсер", слава богу, не писал. Взял готовый с полки, когда писал недо-компилятор недо-бейсика.
Тем не менее, курс парсинга у меня за плечами есть, и как примерно работают такие парсеры, -- я представляю себе.
Уверяю, там всё гораздо интереснее, чем в типичных дилетантских поделках из Split/Mid, вороха условий, и рулона изоленты, чтобы всё не развалилось.
Это я к тому, что написание парсера стоит начинать с теории.


SLIM писал(а):Правильно говорят - если что-то делаешь, то задайся вопросом зачем.....но вот подумайте граждане, что еще не сделано? Да помоему уже все есть. Так что просто учимся делать сами....

Нормального "универсального парсера" на VB6 (и генерирующего чистый VB6-код) я не встречал.
Подтверждаю, что написание такой тулзы было бы осмысленно.


Cсылки по теме:
viewtopic.php?t=28930
viewtopic.php?t=20283
Изображение

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: А кто-нибудь пробовал написать СУБД?

Сообщение MIT » 29.01.2009 (Чт) 0:58

Тема плавно перетекла из одной мега глобальной - СУБД в другую, не менее мега глобальную - супер-парсер.
Не думаю, что идея с универсальным парсеров вообще состоятельна, тем более одному ее очень сложно реализовать. К тому же от разных парсеров разные задачи требуется выполнять и разными путями (причем не только на уровне различия синтаксиса преобразования, а на уровне входных/выходных данных). Так что истино универсальности, думаю, добиться нереально. Направленной универсальности (например, компилятор для разных языков - входные и выходные данные аналогичны, меняется только действия преобразования) создать думаю можно, но все равно, дело это не одного дня и не для одного умельца.

Может где и не прав, переубедите.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: А кто-нибудь пробовал написать СУБД?

Сообщение tyomitch » 29.01.2009 (Чт) 1:42

MIT писал(а):Не думаю, что идея с универсальным парсеров вообще состоятельна, тем более одному ее очень сложно реализовать. К тому же от разных парсеров разные задачи требуется выполнять и разными путями (причем не только на уровне различия синтаксиса преобразования, а на уровне входных/выходных данных). Так что истино универсальности, думаю, добиться нереально.

Видел классических lex/bison?
Изображение

След.

Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 76

    TopList  
cron