Приемы лексического анализа введенного текста - C (СИ)
Формулировка задачи:
Доброго времени суток. В программе мне нужно из введенного текста удалить десятичные числа, превышающие INT_MAX. При этом мне нужно использовать при написании программы парадигму автоматного программирования. Я написал программу
При этом у меня выскакивает ошибка "fixed-point types not supported for this target"
Вероятно, сама логика моей программы неправильна.
Помогите пожалуйста доработать программу. Если мое решение совсем неправильное, то, если нетрудно, напишите свой вариант.
#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;
}Решение задачи: «Приемы лексического анализа введенного текста»
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 }