Russian Qt Forum

Программирование => С/C++ => Тема начата: daimon от Января 01, 2010, 20:39



Название: Распознание текста parser
Отправлено: daimon от Января 01, 2010, 20:39
Как распознать такую строку "2,2". Стандартный функций С++ такой нет (есть для 2.2)?


Название: Re: Распознание текста parser
Отправлено: GNU Dimarik от Января 02, 2010, 01:33
Что значит рапознать? Разобрать? Почитай про рекурсивынй спуск. Если лень самому,попробуй boost::spirit,но он требует хорошего знания С++, шаблонов особенно + долго компилиться.
Многие считают его злом,потому,что им трудно с ним разбираться,отладка действительно становиться чем то неприятным.
В общем то написать какой нить калькулятор можно и самому (без spirit),это не трудно.
Так же я за рекурсивный спуск,потому,что он позволяет выполнять операторы правильно (я имею в виду приоритеты) за счет своей рекурсивной природы.
А вообще что то я разогнался,ты объясни,что значит распознать,может я не так тебя понял


Название: Re: Распознание текста parser
Отправлено: daimon от Января 02, 2010, 01:49
Что значит рапознать? Разобрать? Почитай про рекурсивынй спуск. Если лень самому,попробуй boost::spirit,но он требует хорошего знания С++, шаблонов особенно + долго компилиться.
Многие считают его злом,потому,что им трудно с ним разбираться,отладка действительно становиться чем то неприятным.
В общем то написать какой нить калькулятор можно и самому (без spirit),это не трудно.
Так же я за рекурсивный спуск,потому,что он позволяет выполнять операторы правильно (я имею в виду приоритеты) за счет своей рекурсивной природы.
А вообще что то я разогнался,ты объясни,что значит распознать,может я не так тебя понял
у меня есть спуск и проблема с распознанием чисел с запятой. Для точки есть методы распознания строк, а для запятой не видел.


Название: Re: Распознание текста parser
Отправлено: daimon от Января 02, 2010, 01:53
boost::spirit в MSDN нет


Название: Re: Распознание текста parser
Отправлено: lit-uriy от Января 02, 2010, 02:01
>>boost::spirit в MSDN нет
чтоб он делал в MSDN'е? Boost (http://ru.wikipedia.org/wiki/Boost) сам по себе (кроссплатформенный), а MSDN сам по себе (чисто мелкософтные примочки). Если речь не идёт о Виндовозном API не заглядывай в MSDN.


Название: Re: Распознание текста parser
Отправлено: daimon от Января 02, 2010, 02:06
понял. Как сложно написать под эту библиотеку парсер алгебраических выражений с переменными и функциями?
Переменные можна объявлять при работе выражения, а функции прописаны в коде. Выражения могут содержать уйму действий и операций -+^/ и т.д.


Название: Re: Распознание текста parser
Отправлено: lit-uriy от Января 02, 2010, 02:08
daimon, про такой парсер уже много раз вспоминали. Есть например на Qt-apps программа, кто-то делал курсовик. Можно поизучать её код.
Есть темы на форуме, стоит поискать.


Название: Re: Распознание текста parser
Отправлено: daimon от Января 02, 2010, 02:09
daimon, про такой парсер уже много раз вспоминали. Есть например на Qt-apps программа, кто-то делал курсовик. Можно поизучать её код.
Есть темы на форуме, стоит поискать.
в том то и дело, что я делаю этот курсовик с парсером - там свой парсер (в Шилдте)


Название: Re: Распознание текста parser
Отправлено: vaprele07 от Января 02, 2010, 06:26
Код:
#include <locale>
...
setlocale(LC_ALL,"Ru_RU");
char test[10];
sprintf(test, "3,26");
qDebug() << atof(test);


Название: Re: Распознание текста parser
Отправлено: daimon от Января 02, 2010, 11:18
Код:
#include <locale>
...
setlocale(LC_ALL,"Ru_RU");
char test[10];
sprintf(test, "3,26");
qDebug() << atof(test);
atof не распознает "2,1"


Название: Re: Распознание текста parser
Отправлено: pastor от Января 02, 2010, 16:09
Если всетаки пишешь на Qt, то взгляни на QLocale::toDouble(...)


Название: Re: Распознание текста parser
Отправлено: ilot от Января 03, 2010, 08:39
у меня есть спуск и проблема с распознанием чисел с запятой. Для точки есть методы распознания строк, а для запятой не видел.
Если пишешь собственный парсер, то логично реализовывать собственные методы распознавания примитивов. Лексический анализатор разбирает исходный текст, выдавая на выходе поток лексем. Например, выражение "2,2" будет состоять из следующих лексем: "2", "," и "2". Синтаксический анализатор на основе полученного потока лексем распознает примитивы языка (правила интерпретации полностью определяются программистом). В данном случае программируется, что два целых разделенных запятой интерпретируются как одно действительное число. Так что, если стоит задача разработки собственного парсера никакой проблемы не вижу.
P.S. Почитайте какую-нибудь хорошую книжку, посвященную трансляции.


Название: Re: Распознание текста parser
Отправлено: merke от Марта 22, 2010, 20:16
читай про польскую натацию и будет тебе рай


Название: Re: Распознание текста parser
Отправлено: daimon от Мая 23, 2010, 10:50
читай про польскую натацию и будет тебе рай
решил проблему - меняю локализацию на rus и strtod всё распознает
(а в GUI поставил галочку на разделитель целой и дробной части: точка или запятая)