Мне бы хотелось написать программу для построения графиков функций… это для закрепления изучаемого c++ … но для всего этого нужен парсер… я представляю, что наработок по этому поводу уже достаточно… мне бы простенький парсер для начала, а потом поняв алгоритм, я сам его доработаю… я c++ знаю на начальном уровне (по сравнению с гуру… :)) а вот книжек по алгоритмам неть :( … помогите плз. буду рад всему: фрагментам кода, ссылкам и.т.п….. но хотелось бы иметь класс или пару функций парсера не очень больших по размеру, чтобы можно было полегче разобраться…. примерно не больше 500 строк :) мне для начала хотя бы нужно, чтобы он умел производить операции /*-+ ^ ну и со скобками работал, а потом я доаботаю :) помогите, плз.
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
Парсер — это самая жопа программизма. Вот тебе пара ссылок
http://www.boost.org/libs/spirit/index.html
http://spar.sourceforge.net/
Ну или посмотри сырцы bc и gnuplot.
Good Luck,
UT
PS Ты не в обиде, чтоя удалил одну из двух копий твоего поста? Они были совершенно идентичны.
UT, почему же жопа? Если один раз напишешь — потом принцип уже будет понятен.
Я парсер арифметических выражений не писал, но принцип уже понял. Рекурсивно разбиваешь выражение на атомарные вида <переменная> знак <переменная>. например x *2, x/y, a + b и т.д. Главное — соблюсти порядок действий ;)
P.S.: ХЗэ, чем тебе поможет парсер конфига, но вдруг :)
вот он
мсье в курсе только о бинарных операторах? какая жалость….
потому, что использовать алгоритмические языки, задающие последовательность действий того, как делать, не являются удобными в плане описания того, что требуется сделать.
сие и есть — через задницу.
подозреваю, что надо посмотреть на (f)lex. довольно простой C-подобный синтаксис с описаниями для генерации parser. некоторые примеры подобного можно найти, действительно, в исходниках того же gnuplot, как предложил UT. ищи файлы *.yy, как раз они и будут.
Пасиб… вообщем буду обучаться :) и искать… а то, что удалил ещё один мой пост — правильно сделал, т.к. я забыл поставить галочку уведомить об ответах и видать поздно нажал отменить :)
Замечательно, любой унарный оператор легко превращается в 0 <знак> переменная.
Ты согласен, что +x - это то же самое, что 0+x ?
да-да. sin x == 0 sin x?? :D
а что ты скажешь про n! ?? :))
подкину посложнее примерчик: логарифм по основанию — log n (x) бинарный префиксный оператор.
Да, такие сложноти будут, но немного потом, мне б щас написать пока вещь, которая будет с бинарными операторами работать…. а потом тригонометрические и остальные добавлять…. мне б для гачала написать парсер, который будет понимать / * — + скобки ^ и всё, а потом если разобраться, как сделать sin(x) допустим, то по такому же принципу и остальные добавлять…
Я не имею в виду функции. Я говорил про операторы. Если sin — это оператор, то я стул из-под юзера.
Про факториал — ну да, забыл :) Ну это уже частности :) Кстати автор говорил про /*-+^ и скобки ;)
а то у нас оператор сложения, a.k.a. «+», не возвращает значения… да?
возвращает значение — значит: функция. значит и sin — тоже можно приводить в пример.
если заранее не подумать о подобных возможностях — переписывать parser придётся каждый раз, как только возникнет необходимость в добавлении той или иной возможности.
если сразу подумать о таких вещах, как: приоритетность, унарность, бинарность, тринарность, префиксность, постфикность, инфиксность,… для каждого оператора, то дальше будет малость (в реальности — в разы, но это — действительно малость) проще.
я понимаю, но т.к. этот парсер наверно будет использоваться для вычислений при построения графиков функций то нужно будет только приорететность, бинарность, ну и всякие sin() cos() abs() tg() sqrt() и.т.п.
Теперь ещё один вопросик… т.к. я переполз с винды в линух около года назад, раньше писал высокоуровневые программки на дельфе, щас переполз на линух, учу c++ но вот с граф. интерфейсом проблемы :) описание алгоритмов парсера и исходники я нашёл но теперь мне нужна форма допустим 400х400 и на ней во весь размер область для рисования и на ней рисовать точки надо бы мне… я хочу всё это написать при помощи gtk+… но не совсем понимаю как это реализовать…. можете кинуть архив с примерчиком проги с формой и канвой + рисованием пары точек на этой канве… ну не на канве, а даже не знаю как в gtk это называется :) помогите для начала, а дальше я разберусь :) просто книжек про разработку прог в линухе очень мало… можете мне просто объяснить здесь вкратце… или кинуть архивчик с пимером на dimaz-z at narod.ru плз. только без редиректа на доки :)
Это сделать довольно просто. Посмотри на базовые функции GDK(имеено GDK). Все что тебе надо есть в reference на developer.gnome.org. Искать по GtkDrawing. Смотри какой тип используется для его отрисовки и вперед. *_draw_line/arc/etc
Если надо — могу кинуть код, который на таком виджете рисует штрих-коды.
О, давай, кинь мне на мыло dimaz-z at narod.ru :) пасибо за помощь… там и линии и точки и всякие граф. примитивы рисовать можо, так?
блин, твой проект на c … мне там надо будет ещё gtkmm… кообще для того, чтобы просто график в окне начеритить что использовать GTK, QT или что то другое :) ? надо как то учиться…
что тебе мешает пользовать сишные вызовы? Только честно :)
Можно. Я там пользовал примитив - draw_line(..) :))) А ваще хоть на OpenGL или SDL четри. Пофиг.
PS
Я не телепат, что бы угадать твой мыльник :)
Мыло оё я те уже писал :) dimaz-z@narod.ru и можешь кинуть на c++ какой нить примерчик, а то ещё пытался с glade что нить попробывать, нихрена, не компилит он… не достаёт файлов для компиляции… всяких config.cache и нет целей для сборки некоторых папок :)…. вообщем буду вручную писать, только об этом на gtk.oeg не написано (об рисовании)… поэтму и спрашиваю…
Glade нифига не компилит — он билдит интерфейсы. Ты хоть почитай хотьт что-нить прежде чем батоны жать, а?
то что это прога для разработки интерфейса я понимаю…. но он создаёт файлы проекта в том числе и main.cc делает он это для c++ при помощи glade-- и вообщем его вывод должен работать… таи и заголовочные файлы, исходники, autogen и.т.п. файлы все есть, но он не компилит… свои ошибки я не отвергаю, мог и я напартачить, 3 раза пересоздавал простой проект — форма + область для рисования и одно и то же…
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.
да это фигня… я всё прочитал :) всё дошло…
создай проект C++ в Anjuta. Из нее вызови Glade. Че-нить сделай. Скажи Glade-у build source. Закрой. Запусти билится из Anjuta.
см статью в www.nixp.ru/articles