![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
AD |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Может кто-нибудь подскажет, есть ли готовый, разборщик мат. выражений (в смысле, можно взять исходный код и вставить к себе в программу)? Нет желания изобретать велосипед, уверен, что это уже реализовывали. Хотелось бы увидеть такого рода код. Буду благодарен за любые ссылки.
Да, забыл указать: в результате хотелось бы иметь один из следующих вариантов: На входе строка с математическим выражением: На выходе
- массив структур такого рода [1 ОПЕРАНД ОПЕРАЦИЯ 2 ОПЕРАНД] - что-то наподобие первых двух.... |
|
|
![]() |
fsMark |
![]()
Сообщение
#2
|
![]() Студент ![]() Группа: Участник Сообщений: 97 Регистрация: 23.4.2008 Из: г. Киров Пользователь №: 155 Спасибо сказали: 10 раз(а) Репутация: ![]() ![]() ![]() |
Лично я не очень понял что ты хочешь получить, точнее как с этим потом ты будешь бороться
![]() Я для работы с математическими выражениями использовал обратную польскую запись, реализуется несложно, а работать с ней одно удовольствие. Может быть тебе поможет. |
|
|
trdm |
![]()
Сообщение
#3
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
Как насчет бизончика или QLalr или как там оно называется?
|
|
|
AD |
![]()
Сообщение
#4
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
trdm |
![]()
Сообщение
#5
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
Ну, это смотря с какой целью тебе разборшик нужен.
кстати чета: http://labs.trolltech.com/blogs/category/l...ompilers/qlalr/ не фига не открывается ![]() |
|
|
AD |
![]()
Сообщение
#6
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
trdm |
![]()
Сообщение
#7
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
не, я всетаки добрался
![]() svn://labs.trolltech.com/svn/compilers/qlalr Хоть эта ссылка работает. Буду посмотреть ![]() |
|
|
AD |
![]()
Сообщение
#8
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
После не очень тщательного, а главное, быстрого анализа всех возможностей, было решено реализовывать разбор самому. С этой задачей уже практически справился.
Сообщение отредактировал AD - 25.9.2008, 10:43 |
|
|
Tonal |
![]()
Сообщение
#9
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
А чё ты с этими "массивчиками" делать собираешся?
Может проще QScript использовать? ![]() |
|
|
AD |
![]()
Сообщение
#10
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Это уже не как массив. Сразу вычисляю. Короче, могу сказать для чего мне это надо!
![]() Формулы, как правило, довольно простые. А сложные формулы не пишутся, а пишутся имена функций, которые их вычисляют (таких очень немного, пока 4, но будет не более 8-10). Вот пример формул, которые уже умею разбирать, практически:
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#11
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#12
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цитата А чё ты с этими "массивчиками" делать собираешся? Может проще QScript использовать? ![]() Возможно! Но в Qt 4.3.1 я нашел только QtScript module или же QScriptContext! Да и... уже ведь реализовано (практически)! ![]() |
|
|
Tonal |
![]()
Сообщение
#13
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Вот его я и имел в виду.
Вместо того, чтобы самоау писать парсинг и вычисление - настраиваешь QtScript, чтобы вызывал твои функции и отдаёшь ему такой исходник для вычисления. После, выдёргиваешь значения переменных. ![]() |
|
|
AD |
![]()
Сообщение
#14
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(Tonal) Вот его я и имел в виду. Вместо того, чтобы самоау писать парсинг и вычисление - настраиваешь QtScript, чтобы вызывал твои функции и отдаёшь ему такой исходник для вычисления. После, выдёргиваешь значения переменных. ![]() Что-то я в ассистенте примеров использования не увидел. Можете дать ссылки на примерчики? Заранее спасибо! ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
целый каталог %QTDIR%\examples\script
|
|
|
AD |
![]()
Сообщение
#16
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
ViGOur |
![]()
Сообщение
#17
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Выкладывай, заодно и покритикуем!
![]() |
|
|
AD |
![]()
Сообщение
#18
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Выкладывай, заодно и покритикуем! ![]() Ну.... адекватно только. А то критика типа ЛАЖА, ФИГНЯ или же типа такой, что надо было пользоваться разборщиками или QScript, а не изобретать велосипед, и т.п. не принимается! ![]() source
Небольшие пояснения. buildString(QString& expr, QStringList& ls) - функция из исходной строки с математическим выражением формирует список строк такого типа: "H1 + H2" "H1/H2" "H1*H2" "H1 - H2" "GetHMax lat, lon" - спец.операция (назовем так) - короче вызывает одноименную функцию с данными параметрами. calc(LOGRECORD* record, vector<ParamDescr*>* vec, QStringList& ls, QList<double>& rs_vl)- функция отыскивает значения параметров и вычисляет эти простейшие выраженя. Сообщение отредактировал AD - 26.9.2008, 18:14
Причина редактирования: длинный код оборачивайте в тэг expand
|
|
|
AD |
![]()
Сообщение
#19
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Скорее всего, что QtScript мне придется использовать совсем в другом проекте, который начал делать.
Для выполнения sql-скриптов. Буду благодарен, если дадите ссылочки, где почитать, про это. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#20
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#21
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
bugsstring |
![]()
Сообщение
#22
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 20.6.2008 Пользователь №: 209 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
люди, а никто не писал что-то типа генератора формул ? Чтоб строку в картинку переганять (что-то типа OOo Math) ?
|
|
|
Tonal |
![]()
Сообщение
#23
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Может Tex поможет?
|
|
|
bugsstring |
![]()
Сообщение
#24
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 20.6.2008 Пользователь №: 209 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Может Tex поможет? в том то и дело, что желательно без Теха или ЛаТеха (( просто не факт, что на машинке куды приложение будет установлено будет в наличии что-то подобное... в принципе буду копать в сторону MathML, но проблема на столько "распарсить" строку, сколько потом это все отрендерить... Вот гадство Цитата 1. how can i use mathml in qt?? 2. how will the equations be displayed ?? 3. how can i read or write in to mml (i.e.,mathml)files?? Ответ Цитата Only if you have an Enterprise license, otherwise you'll need to write your own parser/displayer using the XML classes. может попробовать реализовать самостоятельно ? )))) доки ж есть http://doc.trolltech.com/solutions/4/qtmml...tmmlwidget.html пример использования..... ММЛ браузер |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 1.6.2025, 12:54 |