首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

Windows上使用Flex入门

2012-09-03 
Windows下使用Flex入门LEX是UNIX的工具,因此我们需要使用FLEX代替,使得在windows下使用;LEX是词法分析器,

Windows下使用Flex入门

LEX是UNIX的工具,因此我们需要使用FLEX代替,使得在windows下使用;

LEX是词法分析器,主要作用类似于扫描器,输入为源代码(当然我们现在写的示例不一定是源代码),输出为词法单元(泛化的东西,比如1,2,3都可以被称为NUM);

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

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

(2)返回的词法单元,当匹配时要返回什么需要自己定义;

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

?

二、使用LEX

下载的文件如下图:
Windows上使用Flex入门



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

步骤1:定义*.L文件

一开始要定义一个*.L文件,模板解释如下:

?

[java]?view plaincopy
  1. %{??
  2. //声明一些变量或函数??
  3. %}??
  4. //定义正则表达式??
  5. //比如:??
  6. //num?([0-9])+???//左边为符号,右边为正则表达式??
  7. %%??
  8. //定义一系列的动作,即如果匹配了上面定义的某个正则表达式之后的动作,此动作是C语言的语句??
  9. //比如:??
  10. //{num}?{printf("num");}?//左边为{模式},右边为{C语句};??
  11. %%??
  12. void?main()?//执行主函数??
  13. {??
  14. ????yylex();??//开始解析语句,内置函数??
  15. ????//定义C语言语句??
  16. }??
  17. int?yywrap()??
  18. {??
  19. ????return?1;??
  20. }??

?

?

真实代码如下:

?

[java]?view plaincopy
  1. %{??
  2. int?wordCount?=?0;??
  3. int?whiteCount?=?0;??
  4. int?numCount?=?0;??
  5. %}??
  6. letter?[a-zA-Z]??
  7. letters?{letter}+??
  8. numbers?([0-9])+??
  9. whitespaces?([\t\n?])+??
  10. %%??
  11. {letters}?{wordCount++;}???//当匹配letters的正则表达式时执行的动作,一般动作都是结合yacc并返回给语法分析器一个词法单元和属性值,此处把lex作为一个独立的工具使用??
  12. {numbers}?{numCount++;}??
  13. {whitespaces}?{whiteCount++;}??
  14. %%??
  15. void?main()??
  16. {??
  17. ????yylex();??//开始解析语句,内置函数??
  18. ????printf("单词数:%d\n",wordCount);??
  19. ????printf("空白数:%d\n",whiteCount);??
  20. ????printf("数字数:%d\n",numCount);??
  21. }??
  22. int?yywrap()??
  23. {??
  24. ????return?1;??
  25. }??

?

?

步骤2:使用flex命令

?

输入命令:flex 1.L

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

Windows上使用Flex入门

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

Windows上使用Flex入门

此时生成output.exe;

?

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

Windows上使用Flex入门

?

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

最后总共文件如下:

Windows上使用Flex入门

?

?

?

热点排行