Вы не можете изменить yytext
, это const
.
Вы должны пойти другим путем: возможно, просто выделите новую строку, используя strdup
?
Другая проблема: yytext[0]
- это char
, поэтому должно быть и правое.Поэтому нам нужно '.'
вместо "."
.
Еще одна проблема: 10^3
не производит 1000, в C это побитовый исключающий оператор OR (спасибо @Chris за указание на это).Поэтому вместо этого просто введите 1000.
Итак, окончательный код должен выглядеть следующим образом:
<X_REAL>"k"[0-9]+ { char* number = strdup(yytext);
number[0] = '.';
printf("%f", ((atof(number) * 1000) + aux * 1000));
free(number); }
Обратите внимание, что я не проверял правильность вычислений.
За комментарий @ rici, изменение yytext
должно быть в порядке, поэтому код можно упростить следующим образом:
<X_REAL>"k"[0-9]+ { yytext[0] = '.';
printf("%f", ((atof(yytext) * 1000) + aux * 1000)); }