lex规则能否指定读取2进制数字的规则?
本帖最后由 cdsfiui 于 2016-09-19 15:58 编辑例如我们的文本格式可以区分字母和数字。数字12开头的称为Head,34开头的称为Tail,文本格式的lex可以写成
Head:12
Content:*
Tail:34
那么12abc34xyz12可以解释为
Head Content Tail Content Head Content
--------------------------------------------------
而我的需求是,把输入当成字节流:
遇0x01 0x02就判定为Head, 遇到0x03 0x04就判定为Tail,其余的和上面的例子相同。
问题: 这个lex的正则表达式规则应该怎么写?
其实我的问题就在于lex的规则如何处理2进制值的情况,而不是文本的情况。
希望我表述清楚了。谢谢。
回复 1# cdsfiui
其实我的问题就在于lex的规则如何处理2进制值的情况,而不是文本的情况。
直接用 \xXX 的方式匹配值为 XX 的字节嘛。
%option noyywrap
%{
#include <stdio.h>
int o = 0, a = 0, b = 0, c = 0;
%}
a \x01
b \x02
c \x03
%%
{a} { a++; }
{b} { b++; }
{c} { c++; }
. { o++; }
%%
int main() {
yyin = stdin;
yylex();
printf("o = %d, a = %d, b = %d, c = %d\n", o, a, b, c);
}
$ echo -ne '\x01\x02\x03' | ./a.out
o = 0, a = 1, b = 1, c = 1
页:
[1]