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;
}
'[+ - ]'と '[ - +]'は、私が知っているすべてのlex派生語を含む中位のposixのような正規表現システムでも動作します。文字クラスの – rici
@rici十分に公正。しかし、それは秘密の規則のビットですが、 "二重引用符はメタ文字を抑制します"は単純で簡単です。 :-) – Jens
...しかし、特有のフレックス環境の外では動作しません。バックスラッシュは別のあいまいなルール(基本的なものか拡張されたものか)を導入するので、「最初に置くか終わりにして置く」というルールにはいくつかの魅力があります:-) – rici