Windows下使用Flex入门

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!但愿你也加入到咱们人工智能的队伍中来!https://blog.csdn.net/jiangjunshowhtml

               

LEX是UNIX的工具,所以咱们须要使用FLEX代替,使得在windows下使用;java

配对:web

LEX和YACC
FLEX和BISON
JFLEX和JavaCUP
正则表达式


LEX是词法分析器,主要做用相似于扫描器,输入为源代码(固然咱们如今写的示例不必定是源代码),输出为词法单元(泛化的东西,好比1,2,3均可以被称为NUM);windows

固然中间匹配的过程很复杂,好比匹配正则表达式,并输出;使用LEX就不须要考虑这些,咱们只须要定义如下几点:svg

(1)正则表达式,怎么样才算匹配,好比咱们定义的语言中INTEGER才是整数,则输入为INTEGER时匹配正则表达式;函数

(2)返回的词法单元,当匹配时要返回什么须要本身定义;工具

下载地址:http://download.csdn.net/detail/loseblue/283175#comment
flex


2、使用LEX



下载的文件以下图:





咱们写一个统计文本单词个数、空白个数、数字个数;

步骤1:定义*.L文件


一开始要定义一个*.L文件,模板解释以下:人工智能

%{//声明一些变量或函数%}//定义正则表达式//好比://num ([0-9])+   //左边为符号,右边为正则表达式%%//定义一系列的动做,即若是匹配了上面定义的某个正则表达式以后的动做,此动做是C语言的语句//好比://{num} {printf("num");} //左边为{模式},右边为{C语句};%%void main() //执行主函数{ yylex();  //开始解析语句,内置函数 //定义C语言语句}int yywrap()return 1;}


真实代码以下:

%{int wordCount = 0;int whiteCount = 0;int numCount = 0;%}letter [a-zA-Z]letters {letter}+numbers ([0-9])+whitespaces ([\t\n ])+%%{letters} {wordCount++;}   //当匹配letters的正则表达式时执行的动做,通常动做都是结合yacc并返回给语法分析器一个词法单元和属性值,此处把lex做为一个独立的工具使用{numbers} {numCount++;}{whitespaces} {whiteCount++;}%%void main(){ yylex();  //开始解析语句,内置函数 printf("单词数:%d\n",wordCount); printf("空白数:%d\n",whiteCount); printf("数字数:%d\n",numCount);}int yywrap()return 1;}


步骤2:使用flex命令


输入命令:flex 1.L

注意:此处的命令行为lexyacc.bat 打开的命令行;


flex 1.L 生成 lex.yy.c,此时的C文件能够被gcc编译,并可使用;


步骤3:使用gcc编译C程序


Windows平台 的GCC主要是MinGW编译器:http://www.mingw.org/

配置环境变量: path=mingw/bin;


输入命令:gcc -o output.exe lex.yy.c


此时生成output.exe;


步骤4:在命令行中输入output执行exe



此时简单的lex 程序就完成了;

最后总共文件以下:

















           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!但愿你也加入到咱们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow