Приемы лексического анализа введенного текста - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. В программе мне нужно из введенного текста удалить десятичные числа, превышающие INT_MAX. При этом мне нужно использовать при написании программы парадигму автоматного программирования. Я написал программу
#include <stdio.h>
#include <ctype.h>
 
int main(void)
{
    enum states { outside, inside  } state;      /*состояния внутри и вне слова*/
    int space,c,k,max;
    state = outside;
    space=1;                                     /*слева от числа должен быть пробел, 1-его наличие,
                                                   если все слово число и за ним идет точка, запятая,
                                                  пробел или конец строки, то если space=1 слово не печатается*/
    k=0;
    printf("Введите максимальное число %d\n",max);
    while ((c = getchar()) != EOF) {
      switch (state) {
 
      case outside:
          if ((isspace(c)) || c==',' || c=='.') {
              putchar(c);
              if (c==' ' || c=='\n') space=1;
          }
          if  (isalnum(c)) {
              if (isalpha(c)) {
                  putchar(c);
                  space=0;
              }
 
              if (isdigit(c) && space==1)    {
                  k=10k+c;                         /*здесь по мнению компилятора есть ошибка*/
 
              }
              state=inside;
          }
 
      case inside:
          if  (isalnum(c)) {
              if (isalpha(c) && k!=0) {
                  printf("%d", k);
                  k=0;
                  putchar(c);
                  space=0;
              }
 
              if (isdigit(c) && space==1)    {  /*сохраняю число, пока оно не закончилось*/
                  k=10k+c;                      /*Такая же ошибка*/
 
              }
          }
 
              if ((isspace(c) || c==',' || c=='.') && k!=0) {
                  if (k<=max) printf("%d", k);
              }
}
    }
    return 0;
}
При этом у меня выскакивает ошибка "fixed-point types not supported for this target" Вероятно, сама логика моей программы неправильна. Помогите пожалуйста доработать программу. Если мое решение совсем неправильное, то, если нетрудно, напишите свой вариант.

Решение задачи: «Приемы лексического анализа введенного текста»

textual
Листинг программы
int ok = 0;
if (INT_MAX/10 < k) {
    ;// ERROR переполнение
}
else if (INT_MAX/10 == k) {
    if(INT_MAX%10 < d) {
       ;// ERROR переполнение
    }
    else
        ok = 2; // OK, но следующее увеличение k невозможно
}
else
   ok = 1;// OK можно увеличивать
if (ok) { k = 10*k + d }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы