0
Я пытаюсь использовать lex для обнаружения числа с плавающей запятой. Следующий код с входом + 4.23e-21 дает OUTPUTИспользование lex для обнаружения чисел с плавающей запятой
{4,23} е-21
Я хочу, чтобы напечатать
{+ 4.23e-21}
Что я делаю не так и как это исправить?
%{
#include <stdio.h>
int N_count = 0;
%}
Sign [+-]
Num [0-9]
Expo [eE]{Sign}?{Num}+
F {Sign}?({Num}*\.{Num}+)(Expo)?
%%
{F} {printf("Float = {%s}\n", yytext); N_count++;}
%%
int main()
{
yyin = fopen("test.txt", "r");
yylex();
printf("%d\n", N_count);
return 0;
}
'[+ -]' и '[- +]' работают в любой системе с регулярным выражением даже в умеренно posix, включая любую производную lex, о которой я знаю, потому что '-' следует рассматривать как обычный символ в начале и конце класса символов. – rici
@rici достаточно справедливо. Но это немного эзотерическое правило, тогда как «двойные кавычки подавляют метасимволы» просты и просты. :-) – Jens
... но не будет работать за пределами индивидуальной гибкой среды. Обратные косые черты вводят другое неясное правило (базовое или расширенное?), Так что «положить - в начале или в конце и поставить» в начале »правило имеет некоторое обаяние :-) – rici