powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / интерпретатор на с++
25 сообщений из 25, страница 1 из 1
интерпретатор на с++
    #39270012
Serega325
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть проблемы: Есть таблица(количество строк и столбцов может быть любым). Я хочу в программе сделать, чтобы можно было к таблице обратиться sql запросом. Например "select имя_таблицы колонка_1, колонка_2 where колонка_1 < колонка_2
and колонка_4 = BB and колонка_3 >= 8".

1 2 3 4 AA
6 7 8 9 BB
11 12 13 14 BB
************** и т.д.

Подскажите как реализовать select запрос к массиву?
Нужно делать парсинг строки с select запросом или делать интерпретатор sql?
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39270029
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325Нужно делать парсинг строки с select запросом или делать интерпретатор sql?

Да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39270104
Serega325
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSerega325Нужно делать парсинг строки с select запросом или делать интерпретатор sql?

Да.

А конкретнее ? Если интерпретатор, то как делать интерпретатор на с++, какая библиотека для этого используется ?
Подскажите пожалуйста алгоритм для парсинга select запроса.
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39270112
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хочется иметь свою базу данных внутри программы, то и надо брать встраиваемую СУБД.

Если хочется сделать собственный компилятор SQL запросов, то надо во первых изучить такую вещь как бесконтекстную грамматику и инструменты работы с ней. А для собственного интерпретатора SQL, надо дополнительно изучить реляционную алгебру и методы построения РСУБД.
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39270120
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325как делать интерпретатор на с++, какая библиотека для этого используется ?

YACC, Bison или btyacc - выбирай на вкус.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39270125
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325Подскажите пожалуйста алгоритм для парсинга select запроса."Книгу дракона" полезно сначала полистать
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39271588
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serega325Dimitry Sibiryakovпропущено...

Да.

А конкретнее ? Если интерпретатор, то как делать интерпретатор на с++, какая библиотека для этого используется ?
Подскажите пожалуйста алгоритм для парсинга select запроса.
рекурсивные программы нравится отлаживать?
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39271600
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вот пример.
http://ru.stackoverflow.com/questions/23842/Парсер-математических-выражений
- чего мучить человека драконом? для простого случая - прогуглить "парсер выражений рекурсивный спуск", переработать. для сложных - заплатить разработчику Virtuoso ..... (шутка)
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39271605
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,
+1


Serega325,
для оценки трудоемкости можешь глянуть на мое творчество 98 года, после опыта
использования yacc
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
     3.4.  Запросы и отчеты СОД "ВЕЖА"



     Запросы к базе данных в СОД "ВЕЖА" называется фильтрами.

     Фильтр может быть задан в любой табличной форме СОД "ВЕЖА",
посредством формулирования ограничений на  значения  в  колонках
данной  табличной  формы.  Формулировать  ограничения  можно   с
использованием специального (упрощенного)  языка  фильтров  (СОД
"ВЕЖА" FL) либо  с  использованием  языка  SQL.  СОД  "ВЕЖА"  FL
описывается  ниже  в  соответствующем  пункте.  SQL   в   данном
документе не описывается. С этим  языком  можно  познакомится  в
[6], [3].

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

                               76
                    UA.ITV.MLC-2.0/1.02 13 01

     
     3.4.1.  Язык фильтров СОД "ВЕЖА"


     Язык фильтров позволяет достаточно гибко задавать различные
ограничения на  значения  в  колонках  данной  табличной  формы,
извлекаемые из БД.
     
     
     3.4.1.1.  Примеры использования языка фильтров


     пример #1 - для ускорения чтения табличной формы событий  в
системе. показать события в системе после 10.10.99 в форме  View
-> Log -> FILTER:

ИМЯ поля             КРИТЕРИЙ

when                 > 10.10.99

В указанную форму НЕ будут читаться строчки, созданные ранее  10
октября 1999 года, это приведет к общему уменьшению  извлекаемой
и отображаемой информации. Следовательно запрос будет выполнятся
быстрее.

     пример #2 -  демонстрация  задания  нескольких  ограничений
(условий выбора) в одном  запросе.  Необходимо  получить  список
событий связанных с заданными заданными пользователями  системы,
между 1 и 10 октября 1999 на двери door2.

ИМЯ поля                   КРИТЕРИЙ

Tm                         01.10.1999 .. 10.10.1999
Fio                        'Piskunov'  | @ '%Scott%'
Drnm                       door2


     Первая  строчка  задает  интервал   времени,   за   который
необходимо извлечь строчки.

     Вторая  строчка  читается  на  русском  языке  так:  покажи
строчки с фамилией пользователей либо Piskunov, либо содержащего
слово Scott, где
% - означает любую строчку;
| - операция ИЛИ    (OR);
@ - операция похоже (LIKE).

     Третья строчка задает название двери.

     Кроме того нужно отметить, что в поле название двери (Drnm)
или фамилия (FIO), текстовая константа может заключатся, а может
не заключаться в одинарные  кавычки  (Piskunov  или  'Piskunov',
door2 или 'door2'). Опускать кавычки можно только в ограниченном
количестве простых  случаев.  Для  уточнения  смотри  формальное
описание языка фильтров (использование препроцессора).
     
     
     3.4.1.2.  Формальное описание языка фильтров


     В комплект поставки входит  утилита  тестирования  запросов
TMkSql32.exe.  Она  может  быть  использована  для  тестирования
ограничений (условий выбора). Если запрос преобразуется в SQL  -
оператор, то он  сформулирован  правильно,  в  противном  случае
допущена ошибка.

тип      тип               допустимая последовательность
                               77
                    UA.ITV.MLC-2.0/1.02 13 01

языка    поля              символов (терм) в этом поле
фильтров базы данных

 cтроки  char              все в одинарных кавычках
         long              '[символы]',  символ != 0
         long varchar
         longraw
         raw
         varchar

 числа   dec               [-|+] цифра[цифры].[цифры][{E|e} \
                                             [+|-]цифра[цифры]]
         decimal                или
         double precision  [-|+] цифра[цифры] [K|M]
         float
         int
         integer
         number
         numeric
         real
         smallint

 дата1   date
                         любой допустимый вид
         цц.цц.цц        окружить кавычками
         цц/цц/цц        порядок YMD или DMY задается
         цц-цц-цц        приложением при инициализации и
                         для интерпретатора не имеет значения
время   цц:цц:цц         время
        дата1 [время]    дата время

         NULL - спец значение

         логические            кол-во
         операции              операндов
выражение ==
        x & y     AND          2
        x | y     OR           2
        ^ x       NOT          1      или ! x
        ( x )     смена приор. 1
где x - выражение и
    y - выражения

        операции
        числовые и дат

выражение ==
        =  x      РАВНО        1 сокращенный вариант x
        <> x      НЕ РАВНО     1
        =  NULL                0
        <> NULL                0
        >  x      БОЛЬШЕ ЧЕМ   1
        >= x      БОЛЬШЕ РАВНО 1
        <  x      МЕНЬШЕ ЧЕМ   1
        <= x      МЕНЬШЕ       1
        x .. y  == <= x & >= y 2
          .. y    == >= y      1
        x ..      == <= x      1
где x - числовой терм и
    y - числовой терм

        операции над
        строками
выражение ==
        =  x      РАВНО        1 сокращенный вариант  x
        =  NULL                0
        #  x  LIKE&МATCH CASE  1
                               78
                    UA.ITV.MLC-2.0/1.02 13 01

        <> x      НЕ РАВНО     1
        <> NULL                0
        @  x      LIKE         1

где x - строчный терм

      список примеров - тестов языка запросов

    1..
    ..1
    1..2
    1 ...2          ошибка - число начинается с цифры
    =1
    <>1.1
    <+1.
    <=        -        1.
    > 1234567890.1234567890
    >= 1.e1
    = 1.E1 & = 1.e+1 & = 1.E-1
    1..10 | -5.. | ..             20
    ^(=1 & =2 & =3)
    =1K
    =1M
    =NULL
    <>NULL
    xyz
    ='xyz' | ( = 'xyz') правильно
    ='xyz' | xyz
    #'qwertyuioplkjhgfdsazxзхъэждлорпавыфячсмитьбю.-0981238'
    @'xyz'
    <> 'xyz'
    <> xyz
    'xyz'
    = 01.01.01
    01.01.01 .. 02.02.02
    11:22:33.333       ошибка - части секунды не поддерживаются
    +11:22:33          ошибка
    (=11:22:33 | =22:33:44 | = 33:44:55)
    <> 11.22.33 11:22:33 | (= 11.22.33 11:22:33)
    (((((((=1)))))))&((((((=2))))))
    (((<>1)&((<>2))&(((<>3)))))|((-5..7)&(12..17)&      \
            (.. 200))|(=+123.456789E-1234567890)& <> NULL

     
     
     3.4.1.2.1.  Использование препроцессора


     В поле строкового типа  (char  и  т.д.)  перед  выполнением
преобразования выполняется препроцессор. Препроцессор  выполняет
преобразование  строки,  введенной   пользователем,   в   строку
допустимую для языка  запросов,  по  следующему  правилу:  любая
последовательность символов xyz, которая начинается  НЕ  c  '(',
''', '!', '^', '@', '<', '#', '=', '  ',  '\t'  преобразуется  в
последовательность @ 'xyz'.

...
Рейтинг: 0 / 0
интерпретатор на с++
    #39271626
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужен только select ? boost spirit... boost.metaparse (boost.org/libs/spirit boost.org/libs/metaparse). последнее интересно тем, что разбор и првоерка синтаксиса проиходит на этапе компиляции.

имхо это довольно трудная задача даже используя указанные библиотеки. лучше просто взять sqlite и запихать эту таблицу туда.
sqlite представляет из себя один файл (один c, один h), так что можно прямо в исходники его засунуть, если почему-то важно чтобы программа компилилась без зависимостей. плюсом у тебя будет весь sql на всякий, а не только select.
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39272470
trdm_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоспидя, засунуть таблицу в скулайт в мемори и фигачить по ней запросы было бы гораздо палегче, чем то что вы собрались сделать.
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39272482
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да тут вообще тема С++ не прослеживается.

Любой специалист по БД решит эту задачу быстрее чем С++ кодер т.к.
тут специфика именно такая. А чтобы решать таких задач много
и гибко надо.

1) Взять любую жлобскую dbms из серии тех что доступны бесплатно. Я-бы предложил
на выбор PostgreSQL, MySQL, Sqlite3.
2) Прогрузить эту чортову уродливую текстовую табличку (c опцией SPLITTER=" ") в базу.
3) Выполнить чортов запрос.
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39272920
_Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton......
1) Взять любую жлобскую dbms из серии тех что доступны бесплатно. Я-бы предложил
на выбор PostgreSQL, MySQL, Sqlite3.
........


PostgreSQL, MySQL, Sqlite3 не являются жлобскими СУБД, по крайней мере PostgreSQL, Sqlite3.
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39272923
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Sheraton, извини если задел твои чувства. Я это слово использую часто в шутошном
контексте. В некотором роде мои собственные разработки тоже являются жлобскими.

Я просто смайлик не ставлю из лени.
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39275732
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интерпретатор С.С++ https://root.cern.ch/cint
Только забодай меня корова, не могу взять в толк, а нахера С, если нужен интерактив с СУБД?
Большая часть СУБД ( опенсорце точно ) имеют консольную утилиту для запросов... M$SQL не рассматриваем.
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39275740
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_xБольшая часть СУБД ( опенсорце точно ) имеют консольную утилиту для запросов... M$SQL не рассматриваем.
есть такая утилита
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39275895
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tnik_xБольшая часть СУБД ( опенсорце точно ) имеют консольную утилиту для запросов... M$SQL не рассматриваем.
есть такая утилита
Да, со времен sybase альянса... https://ru.wikipedia.org/wiki/Sybase
Я не говорю, что нету, я говорю - не рассматриваем.
А sybase это то, каким должен был бы быть m$sql...
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39275921
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_xА sybase это то, каким должен был бы быть m$sql...
ХЗ, должен ли? Да, есть юридические препоны из патентов, но как говорится: <censored>. Было бы перспективно, передрали бы все и от себя добавили, ведь несложно написать тоже самое имея под рукой оригинал, но по другому. Раз не сделали - значит не нужно было, значит то что умерло должно было умереть.

Модератор: Настоящий джентльмен — это тот, кто кошку всегда называет кошкой, даже если он о нее споткнулся и упал.
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39275944
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воопще ничего непонятно!

А есть comparison table по m$sql и Sybase?
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39276513
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВоопще ничего непонятно!

А есть comparison table по m$sql и Sybase?Сравнимую таблицу между СУБД и компанией? Это ты себе как представляешь?
На всякий случай: Фирма Sybase во время своего существования производила и продавала четыре совершенно разных СУБД :)
Но да, таблички отличий между всеми ними конечно существуют. Просто погугли "one vs another" подставляя имена интересующих СУБД и получишь десятки разных с разных точек зрения.
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39276521
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, это не к тебе вопрос а к господину nik_x.

Он проводит параллели. Вот мне стало интересно что там такого.
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39290415
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
По форуму поискать, религия не позволяет?
http://www.sql.ru/forum/21125/sravnenie-sybase-vs-ms-sql
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39290532
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_xmayton,
По форуму поискать, религия не позволяет?
http://www.sql.ru/forum/21125/sravnenie-sybase-vs-ms-sql А не посмотреть бы тебе на даты постов в том топике? За 13 лет все поменялось очень сильно...
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39291383
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlnik_xmayton,
По форуму поискать, религия не позволяет?
http://www.sql.ru/forum/21125/sravnenie-sybase-vs-ms-sql А не посмотреть бы тебе на даты постов в том топике? За 13 лет все поменялось очень сильно...
1. У вас гугль забанен?
2. Вежливость на форуме - отменили?
...
Рейтинг: 0 / 0
интерпретатор на с++
    #39291514
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_xWhite Owlпропущено...
А не посмотреть бы тебе на даты постов в том топике? За 13 лет все поменялось очень сильно...
1. У вас гугль забанен?А что общего с забаненным Гуглем и устаревшей информацией?
nik_x2. Вежливость на форуме - отменили?Вежливость понятие относительное. Вот я например, считаю что это невежливо давать ссылки на неверную информацию.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / интерпретатор на с++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]