Ubuntu上调用命令make config配置linux 内核时报错/bin/sh: 1: flex: not found,需要安装flex,同时也查了下flex是什么,怎么用。
Ubuntu安装Flex
sudo apt-get install flex
就可安装成功
Flex是什么
flex是一个生成词法扫描器的工具,运行流程如下图:
规则文件的格式是:
definitions
%%
rules
%%
user code
definitions是可选的,rules和user code是必须的。
rules的规则是一条正则表达式对于一个ACTION:
ERE ACTION.
ERE表示扩展正则表达式,ACTION表示用户希望当遇到匹配这条正则表达式的文本时所执行的C语言操作。
user code有固定的格式,要带有main函数和yywrap函数
Flex怎么用
举个简单的例子,下面生成一个example.l的规则文件:
%%
username printf("%s", getlogin());
%%
int main(int argc, char* argv[])
{
yylex();
return 0;
}
//yywarp规定有的
int yywrap(){
return 1;
}
rules部分是
username printf("%s", getlogin());
表示当在文本中匹配到username时,就打印当前系统的用户名来替换掉username.我们使用flex命令:
flex example.l
当前目录下会生成一个lex.yy.c的c语言文件。我们用gcc编译它,生成可执行文件test:
gcc -o test lex.yy.c
我们现在再生成一个测试文件file,内容如下:
eden_ubuntu@edenubuntu:~/Documents/Project/TestCode/flex$ cat file
username 1
username 2
使用命令:
./test < file
结果如下:
eden_ubuntu@edenubuntu:~/Documents/Project/TestCode/flex$ ./test < file
eden_ubuntu 1
eden_ubuntu 2
username都被替换成了系统登录名eden_ubuntu。
当然我们这里的规则文件很简单,实际上可以根据需要生成很复杂的规则文件来完成复杂的匹配任务,这里我们只是让大家有一个大概的认识,就不深入讨论了