16進数のパターンでは、数字 'a' ... 'f'は考慮されません。 [x|X]
での垂直バーは、おそらく間違っている
- :
[-]?[0][xX][0-9a-fA-F]+ {cout << yytext << " Number" << endl; }
さらに観測:これを試してみてください。それ以外の場合は、これも動作します:0|a98h
。
- サンプルの最後に 'h'がマッチしません。 (これは、あるいは意図してもしなくてもよい。)
別のアプローチは、この(test-hex.l
)のようになります。
%{
#include <iostream>
using namespace std;
%}
%option caseless
%%
[-]?[0][x][0-9a-f]+ {cout << yytext << " Number" << endl; }
%%
int main(int argc, char **argv) { return yylex(); }
int yywrap() { return 1; }
cygwinの上でコンパイルし、フレックスとgccでテスト:
$ flex -V
flex 2.6.3
$ flex -otest-hex.cc test-hex.l ; g++ -o test-hex test-hex.cc
$ echo '0xa98h' | ./test-hex
0xa98 Number
h
一致するパターンはありませんh
。これは、lex/flexが標準出力を生成し、標準出力と一致しないものすべてをエコーするために出力されます。
'flex'を学ぶには、このリンク[Flex](http://dinosaur.compilertools.net/flex/manpage.html)またはGoogleの" flex manual "をお試しください。 – Scheff