nixp.ru v3.0

24 января 2017,
вторник,
12:09:56 MSK

Аутсорсинг Linux с компанией «Флант»
dimaz-z написал 25 января 2005 года в 09:09 (1090 просмотров) Ведет себя как мужчина; открыл 4 темы в форуме, оставил 15 комментариев на сайте.

Мне бы хотелось написать программу для построения графиков функций… это для закрепления изучаемого c++ … но для всего этого нужен парсер… я представляю, что наработок по этому поводу уже достаточно… мне бы простенький парсер для начала, а потом поняв алгоритм, я сам его доработаю… я c++ знаю на начальном уровне (по сравнению с гуру… :)) а вот книжек по алгоритмам неть :( … помогите плз. буду рад всему: фрагментам кода, ссылкам и.т.п….. но хотелось бы иметь класс или пару функций парсера не очень больших по размеру, чтобы можно было полегче разобраться…. примерно не больше 500 строк :) мне для начала хотя бы нужно, чтобы он умел производить операции /*-+ ^ ну и со скобками работал, а потом я доаботаю :) помогите, плз.

Uncle Theodore

Парсер — это самая жопа программизма. Вот тебе пара ссылок

http://www.boost.org/libs/spirit/index.html

http://spar.sourceforge.net/

Ну или посмотри сырцы bc и gnuplot.

Good Luck,

UT

PS Ты не в обиде, чтоя удалил одну из двух копий твоего поста? Они были совершенно идентичны.

Longobard

UT, почему же жопа? Если один раз напишешь — потом принцип уже будет понятен.

Я парсер арифметических выражений не писал, но принцип уже понял. Рекурсивно разбиваешь выражение на атомарные вида <переменная> знак <переменная>. например x *2, x/y, a + b и т.д. Главное — соблюсти порядок действий ;)

P.S.: ХЗэ, чем тебе поможет парсер конфига, но вдруг :)

вот он

Genie
<переменная> знак <переменная>

мсье в курсе только о бинарных операторах? какая жалость….

почему же жопа?

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

сие и есть — через задницу.

о для всего этого нужен парсер… я представляю, что наработок по этому поводу уже достаточно… мне бы простенький парсер для начала

подозреваю, что надо посмотреть на (f)lex. довольно простой C-подобный синтаксис с описаниями для генерации parser. некоторые примеры подобного можно найти, действительно, в исходниках того же gnuplot, как предложил UT. ищи файлы *.yy, как раз они и будут.

dimaz-z

Пасиб… вообщем буду обучаться :) и искать… а то, что удалил ещё один мой пост — правильно сделал, т.к. я забыл поставить галочку уведомить об ответах и видать поздно нажал отменить :)

Longobard
Genie
мсье в курсе только о бинарных операторах? какая жалость….

Замечательно, любой унарный оператор легко превращается в 0 <знак> переменная.

Ты согласен, что +x  - это то же самое, что 0+x ?

Genie
LONGOBARD
Замечательно, любой унарный оператор легко превращается в 0 <знак> переменная.

Ты согласен, что +x — это то же самое, что 0+x ?

да-да. sin x == 0 sin x?? :D

а что ты скажешь про n! ?? :))

подкину посложнее примерчик: логарифм по основанию — log n (x) бинарный префиксный оператор.

dimaz-z

Да, такие сложноти будут, но немного потом, мне б щас написать пока вещь, которая будет с бинарными операторами работать…. а потом тригонометрические и остальные добавлять…. мне б для гачала написать парсер, который будет понимать / * — + скобки ^ и всё, а потом если разобраться, как сделать sin(x) допустим, то по такому же принципу и остальные добавлять…

Longobard
Genie
да-да. sin x == 0 sin x?? :D

а что ты скажешь про n!  ?? :))

подкину посложнее примерчик: логарифм по основанию — log n (x) бинарный префиксный оператор.

Я не имею в виду функции. Я говорил про операторы. Если sin — это оператор, то я стул из-под юзера.

Про факториал — ну да, забыл :) Ну это уже частности :) Кстати автор говорил про /*-+^ и скобки ;)

Genie
Я говорил про операторы.

а то у нас оператор сложения, a.k.a. «+», не возвращает значения… да?

Я не имею в виду функции.

возвращает значение — значит: функция. значит и sin — тоже можно приводить в пример.

Кстати автор говорил про /*-+^ и скобки ;)

если заранее не подумать о подобных возможностях — переписывать parser придётся каждый раз, как только возникнет необходимость в добавлении той или иной возможности.

если сразу подумать о таких вещах, как: приоритетность, унарность, бинарность, тринарность, префиксность, постфикность, инфиксность,… для каждого оператора, то дальше будет малость (в реальности — в разы, но это — действительно малость) проще.

dimaz-z

я понимаю, но т.к. этот парсер наверно будет использоваться для вычислений при построения графиков функций то нужно будет только приорететность, бинарность, ну и всякие sin() cos() abs() tg() sqrt() и.т.п.

dimaz-z

Теперь ещё один вопросик… т.к. я переполз с винды в линух около года назад, раньше писал высокоуровневые программки на дельфе, щас переполз на линух, учу c++ но вот с граф. интерфейсом проблемы :) описание алгоритмов парсера и исходники я нашёл но теперь мне нужна форма допустим 400х400 и на ней во весь размер область для рисования и на ней рисовать точки надо бы мне… я хочу всё это написать при помощи gtk+… но не совсем понимаю как это реализовать…. можете кинуть архив с примерчиком проги с формой и канвой + рисованием пары точек на этой канве… ну не на канве, а даже не знаю как в gtk это называется :) помогите для начала, а дальше я разберусь :) просто книжек про разработку прог в линухе очень мало… можете мне просто объяснить здесь вкратце… или кинуть архивчик с пимером на dimaz-z at narod.ru плз. только без редиректа на доки :)

decvar

Это сделать довольно просто. Посмотри на базовые функции GDK(имеено GDK). Все что тебе надо есть в reference на developer.gnome.org. Искать по GtkDrawing. Смотри какой тип используется для его отрисовки и вперед. *_draw_line/arc/etc

decvar

Если надо — могу кинуть код, который на таком виджете рисует штрих-коды.

dimaz-z

О, давай, кинь мне на мыло dimaz-z at narod.ru :) пасибо за помощь… там и линии и точки и всякие граф. примитивы рисовать можо, так?

dimaz-z

блин, твой проект на c … мне там надо будет ещё gtkmm… кообще для того, чтобы просто график в окне начеритить что использовать GTK, QT или что то другое :) ? надо как то учиться…

decvar

что тебе мешает пользовать сишные вызовы? Только честно :)

кообще для того, чтобы просто график в окне начеритить что использовать GTK, QT или что то другое :) ? надо как то учиться…

Можно. Я там пользовал примитив  - draw_line(..) :))) А ваще хоть на OpenGL или SDL четри. Пофиг.

PS

Я не телепат, что бы угадать твой мыльник :)

dimaz-z

Мыло оё я те уже писал :) dimaz-z@narod.ru и можешь кинуть на c++ какой нить примерчик, а то ещё пытался с glade что нить попробывать, нихрена, не компилит он… не достаёт файлов для компиляции… всяких config.cache и нет целей для сборки некоторых папок :)…. вообщем буду вручную писать, только об этом на gtk.oeg не написано (об рисовании)… поэтму и спрашиваю…

decvar

Glade нифига не компилит — он билдит интерфейсы. Ты хоть почитай хотьт что-нить прежде чем батоны жать, а?

dimaz-z

то что это прога для разработки интерфейса я понимаю…. но он создаёт файлы проекта в том числе и main.cc делает он это для c++ при помощи glade— и вообщем его вывод должен работать… таи и заголовочные файлы, исходники, autogen и.т.п. файлы все есть, но он не компилит… свои ошибки я не отвергаю, мог и я напартачить, 3 раза пересоздавал простой проект — форма + область для рисования и одно и то же…

decvar

Hi. This is the qmail-send program at nwgsm.ru.

I’m afraid I wasn’t able to deliver your message to the following addresses.

This is a permanent error; I’ve given up. Sorry it didn’t work out.

:

Mailbox is FULL.

dimaz-z

да это фигня… я всё прочитал :) всё дошло…

decvar

создай проект C++ в Anjuta. Из нее вызови Glade. Че-нить сделай. Скажи Glade-у build source. Закрой. Запусти билится из Anjuta.

см статью в www.nixp.ru/articles

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.