Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
#1

простейший синтаксический анализатор(Распознавание числа) - C++

04.12.2013, 19:49. Просмотров 996. Ответов 4
Метки нет (Все метки)

Это задание является подзаданием для курсовой по формальным языкам.
Мне надо(пока что только это) чтобы моя программа распознавала введенные числа.
Числа могут быть трех форматов:
1)Простое целое число (Пр. 456)
2)Число с точкой(Пр. 78,35)
3)Число с плавающей запятой(Пр. 45Е-78)
С простыми числами все легко.Сделала->работает но когда попыталась добавить код для распознавания чисел с точкой уткнулась носом в лужу!
вот код(ВЕСЬ но он не большой)
Кликните здесь для просмотра всего текста
C++
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
#include<iostream>
using namespace std;
float Number()
{
      float number=0;
      float point=0;
      float position=0;
      for(;;)
      {
              char c=cin.get();
              if((c >= '0') && (c <= '9'))
              {
              number=number*10+(c-'0');
              }
              else
                  if(c=='.')
                  {
                        point=Number();
                        float tmp=point;
                        int del=10;
                        while(tmp)
                        {
                                  tmp/=10;
                                  del*=10;
                        }
                        point=point/del;
                        number+=point;
                        
                  }
                  else
                  {
                  cin.putback(c);
                  break;
                  }
              }
      return number;
}
int main()
{
    float num=Number();
    cout<<"you entered the number:"<<num;
    system("pause");
    return 1;
}

опишу вкратце что я имела ввиду:
Допустим я ввела 12.56
Я считываю 12 натыкаюсь на точку пропускаю ее иду дульше считываю опять число -56 затем узнаю сколько у этого числа разрядов(2) значит надо его поделить на 10^2 и получу 0.56 затем к исходному 12 прибавлю 0.56 и уаля получу 12.56
только почемуто все не так вуаля как хотелось бы отдельно числа считываются но вот незадача....Х*ня какая то получается
П.С мб кто то посоветует хорошую литературу/статьи по нисходящему синтаксическому разбору?
А то то что дают на лекциях совсем беда

Добавлено через 18 минут
ошибку нашла.Оказывается не умею находить количество цифр в числе... tmp был типа float И бесконечно делился) все ок
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 19:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос простейший синтаксический анализатор(Распознавание числа) (C++):

Синтаксический анализатор - C++
Нужна помощь именно с алгоритмом. Задание звучит так - проверить корректность написания заголовка функции. Прототипы не учитываются. ...

Синтаксический анализатор - C++
никак не могу разобраться с заданием, может быть кто-то сталкивался 1.Построить синтаксические диаграммы для следующих конструкций; ...

Синтаксический анализатор - C++
Нужно написать синтаксический анализатор для одного маленького фрагмента программы, т.е. проверка правильности грамматического построения...

синтаксический анализатор - C++
Доброго времени суток. Подскажите как написать синтаксический анализатор кода(паскаль). Как это правильно делать? как это сделано в средах...

Синтаксический анализатор. Формула - C++
Нужно построить синтаксический анализатор для понятия формула. Программа выдает ошибки. вот условие: и вот мой код: #include...

Синтаксический анализатор. Рекурсия - C++
Пожалуста, помогите кто чем может... знаю, что это не так сложно, но не представляю, как реализовывать. необходимо сделать с помощью...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
04.12.2013, 19:59 #2
Подозреваю, что уже не нужно, но все-таки отмечу.
1. По формулировке это все-таки не синтаксический анализ, а лексический.
2. Приведенный код - не анализатор, а обычное преобразование строки в число.
3. При написании парсера обычно предполагается реализация конечного автомата, чего я тут не наблюдаю.
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
09.12.2013, 12:32  [ТС] #3
Цитата Сообщение от 0x10 Посмотреть сообщение
Подозреваю, что уже не нужно, но все-таки отмечу.
1. По формулировке это все-таки не синтаксический анализ, а лексический.
2. Приведенный код - не анализатор, а обычное преобразование строки в число.
3. При написании парсера обычно предполагается реализация конечного автомата, чего я тут не наблюдаю.
Вы конечно во всем правы, пока это обычное приеобразование.Но это толькочасть нужного мне кода, и именно в этой части была ошибка,поэтому я запостила только ту часть где распознается число.
Чем лексический отличается отсинтаксического??
Rivory
146 / 112 / 2
Регистрация: 15.01.2013
Сообщений: 266
09.12.2013, 13:12 #4
Лексический анализ - это разбиение входящего потока на токены. Синтаксический - сопоставление токенов с правилами грамматики.

А вообще, Вам обязательно писать на чистом C++? На том же ANTLR этот парсер в 2 строчки делается.
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
09.12.2013, 23:13  [ТС] #5
Цитата Сообщение от Rivory Посмотреть сообщение
Лексический анализ - это разбиение входящего потока на токены. Синтаксический - сопоставление токенов с правилами грамматики.

А вообще, Вам обязательно писать на чистом C++? На том же ANTLR этот парсер в 2 строчки делается.
увы да обязательно на с++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2013, 23:13
Привет! Вот еще темы с ответами:

Разработать синтаксический анализатор - C++
Может кто помочь понять как должна выглядеть программа подобного вида? си++ знаю, но с этими анализаторами что то я не догнал( : ...

Реализовать синтаксический анализатор языка - C++
Ребят,может,сможет кто помочь. Почти весь день сидел писал программу, уже просто мозг высох и отказывается работать, перечитал похожие...

Синтаксический анализатор понятия скобки - C++
Здравствуйте,помогите пожалуйста с построение синтаксического анализатора понятия скобки скобки::=A|B(скобки скобки) Заранее спасибо...

Количество строк в файле. Синтаксический анализатор - C++
Подскажите пожалуйста. Я написал синтаксический анализатор. Он считывает некоторое выражение из текстового файла. Мне хотелось бы знать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.12.2013, 23:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru