|
我试了一下redhat8的flex,把我搞糊涂了,那位高手帮我看看
我是想把整数都改为hex, 本来第1 个%%后只有一项{number} ,因为调试才加了
{digit}+ ,9[0-9]+ 。但它们只对9开头的数有效。规则好像不能传递
我的样本文件 "test.txt" 如下
==========>8==========
1234
45
6
7
34
987
99
34
==========>8===========
lex文件"mylex.l"如下:
========>8=================================
%{
/* a Lex program that changes all numbers
from decimal to hexadecimal notation,
printing a summary statistic to stderr
*/
#include <stdlib.h>
#include <stdio.h>
int count = 0;
%}
digit [0-9]
number {digit}+
%%
{number} {
int n = atoi (yytext);
printf ("0x%xh", n);
if (n > 9) count++;
}
{digit}+
{
int n = atoi (yytext);
printf ("0x%xh", n);
if (n > 9) count++;
}
9[0-9]+
{
int n = atoi (yytext);
printf ("0x%xh", n);
if (n > 9) count++;
}
%%
main( )
{
yylex ( );
fprintf ( stderr, "number of replacements = %d",count ) ;
return 0 ;
}
int yywrap()
{
return 1;
}
========================>8==============================
命令行下执行:
flex mylex.l (生成 lex.yy.c)
gcc lex.yy.c -o mylex
./mylex < test.txt
结果如下:
1234
45
6
7
34
0x3dbh
0x63h
34
怎么回事啊?
谢谢各位拉! |
|