cdsfiui 发表于 2016-09-19 15:56

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进制值的情况,而不是文本的情况。
希望我表述清楚了。谢谢。

MMMIX 发表于 2016-09-19 18:08

回复 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]
查看完整版本: lex规则能否指定读取2进制数字的规则?