确定lex解析器的十六进制值

时间:2017-03-04 07:34:24

标签: parsing flex-lexer lex

我目前正在尝试解析文本文件并在其中查找任何十六进制数字。如果十六进制数不正确,我将其显示为非数字。

input:   

-0xA98F 
0XA98H
0x123 
0xabc

expected output:
-0xA98F valid
 0x123  valid
 0xabc  not valid
 0xA98H not valid

我的问题是,如果我得到类似0xA98H的东西,它将输出为0xA98并显示为数字。我的目标是让我的输出像我的例子,但我没有看到任何解决我的问题。

  [-]?[0][x|X][0-9A-F]+ {cout << yytext << " Number" << endl; }

1 个答案:

答案 0 :(得分:2)

以下示例代码根据OP的要求接受十六进制数字:

$ flex -otest-hex.cc test-hex.l ; g++ -o test-hex test-hex.cc

$ echo '-0xA98F                                              
> 0XA98H
> 0x123
> 0xabc
>' | ./test-hex
-0xA98F valid
0XA98H  not valid
0x123   valid
0xabc   not valid

$

使用flex和g ++编译并在cygwin上测试:

(\n|\r|\r\n)

忽略空格和空行。

redirect_to表示一种模式,可以匹配类似Unix的行结尾,类似MacOS的行结尾,以及类似DOS / Windows的行结尾(按此顺序)。