2017-01-15 29 views
0

浮動小数点数を検出するためにlexを使用しようとしています。 入力+ 4.23e-21 と次のコードが出力lexを使用して浮動小数点数を検出する

{4.23} E-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; 

} 

答えて

0

F. を指定するときに、私はまたSign [+-]に非終端文字の範囲[X-Y]を避けるためにSign "+"|"-"をお勧めします({Expo})代わりの(Expo)を使用してみてください。

+0

'[+ - ]'と '[ - +]'は、私が知っているすべてのlex派生語を含む中位のposixのような正規表現システムでも動作します。文字クラスの – rici

+0

@rici十分に公正。しかし、それは秘密の規則のビットですが、 "二重引用符はメタ文字を抑制します"は単純で簡単です。 :-) – Jens

+0

...しかし、特有のフレックス環境の外では動作しません。バックスラッシュは別のあいまいなルール(基本的なものか拡張されたものか)を導入するので、「最初に置くか終わりにして置く」というルールにはいくつかの魅力があります:-) – rici

関連する問題