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

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

Восстановить пароль Регистрация
 
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
04.12.2013, 19:49     простейший синтаксический анализатор(Распознавание числа) #1
Это задание является подзаданием для курсовой по формальным языкам.
Мне надо(пока что только это) чтобы моя программа распознавала введенные числа.
Числа могут быть трех форматов:
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++ Синтаксический анализатор. Формула
синтаксический анализатор C++
Синтаксический анализатор C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
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 строчки делается.
увы да обязательно на с++
Yandex
Объявления
09.12.2013, 23:13     простейший синтаксический анализатор(Распознавание числа)
Ответ Создать тему
Опции темы

Текущее время: 01:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru