Flex Bison 使用教程.docx
《Flex Bison 使用教程.docx》由会员分享,可在线阅读,更多相关《Flex Bison 使用教程.docx(31页珍藏版)》请在第壹文秘上搜索。
1、Flex&Bison运用教程运用说明 本文须要读者对C语言有肯定的了解作为基础 本文中所涉和的例子可以用本站供应的全自动化MakefiIe一文中供应的MakefilC进行编译 读者假如在1.inux1.可以干脆运用,Wind。WS用户须要CygwinO环境 本文中的工具,须要用户安装flex和bison软件包1.介谿编译器是软件开发中的核心部件,其作用是其他任何软件所不能取代的。编译器在工作过程中,往往完成如下的任务:1 .读取源代码并且获得程序的结构描述2 .分析程序结构,并且生成相应的目标代码在UNlX早期时代,编写一个编译器是一件特别耗时的工作。人们为了简化开发过程,开发了1.eX和YA
2、Ce程序来解决第一个任务,依据用户描述的语审,生成能够解决问题的C/C+语言代码,供开发者运用。1 .将源代码文件分解为各种词汇(1.CX)2 .找到这些词汇的组成方式(YACC)要么是3Iabj-OZl一个带范国的字符类,符合任何满意宣,b;从丁到o还有ZA-Z一个取反的字符类,比如任何字母除了大写字母。A-Znl任何字符除了大写字母和换行r*零个或更多r,r可以是随意正则表达式r+一个或更多rr?零个或最多一个rr2,5任何2到5个rr2,2个或更多rr4正好4个rname对name的扩展xyzfoo符合正则表达式xyz)foo的字符串X假如X是一个a,b,f,宣,T,t,或者R则依据AS
3、Cn码x转义符进行处理,否则,其他的X将用来做取消处理符处理0一个ASCII码空字符123内容为八进制123的char型x2a内容为十六进制0x2a的char型(r)符合一个r,括号是用来越过优先级的rs正则表达式r,紧跟着一个要么是r要么是S处理,干脆进入C文件#include%/词法规则段代码01234567891+printf(NUMBER);/数字类型字符申a-zA-Z+printf(WO);/单词类型字符串(WORD)printf(RD);%/协助C语言函数代码(干脆写C语言,无须括号,我们这里无内容)下面我们首先运用ICX程序生成所需的状态机代码:flex-otest.ctest.
4、l#从正则表达式声称对应的C语言代码,留意-。后不要方空格(flexbug?)gcctest.c-otest-Ifl#从C语言代码生成二进制,从而运行,-Ifl说明链接Iibf1.a库文件./test#运行刚刚生成的二进制下面我们来对刚生成的二进制进行试枝,以弄清晰Hex究竟是做什么的,在test程序中输入以卜内容,按KCtrl-D可以退出test程序:3505hellowhatis3505通过这些试验,信任您已经明白了FleX的用途,每当一个正则表达式符合时,flex生成的代码就会自动调用对应的函数,或者运行对应的程序。卜.面我们对这个例子进行一些深化探讨,处理一个类似C语言的程序配置脚本代
5、码。首先,一个演示脚本如下:logging;categorylame-serversnull;categorycnamenull;);zone.typehint;fileetcbinddb.root;在这个脚本中,我们可以看到一系列的词汇类型: 单词(WoRD),比如zone,type 文件名O,ttretcbinddb.root, 引号(QUoTE),比如文件名两边的 左花括号QBRACE),T 右花括号(EBRACE),分号(SEMlCo1.ON我们修改后的1.eX代码如下:%#include%a-zA-Za-zA-Z0-9*printf(WORD);/*字符串*/a-zA-Z0-9/.-
6、+Printfr);/*文件名*/printf(QUOTE);/*引号*/1Printf(OBRACE);/*左花括号7!printf(EBRACE);/*右花括号7printf(SEMICO1.ON);/*分号711printf(n);/*换行*/ltl/*忽视空白字符*/%intyywra(void)/*当词法分析器到了文件末尾做什么7return1;/*返回1,说明停止前进,O则接着*/voidyyerror(char*s)/*错误信息打印函数*/fprintf(stderr,%sn,s);returnO;intmain(intargc,char*argv)FI1.E*fp;fp=fop
7、en(argvl1.V);*首先打开耍被处理的文件(参数1)*/yyin=fp;*yyi11是IeX默认的文件输入指针,则不处理限制台输入*/yylex();/*调用IeX的工作函数,从这里起先,Iex的词法分析器起先工作7fclose(fp);return0;到这里,我们已经完全可以对一个包含各种类型词组的源代码文件进行分析,得出其中各类型词组的排列依次。在一个规范的基于语法的源代码中,词组的依次从肯定意义上来说,就是语法。对于源代码,IeX的处理实力也就到这里为止,但是我们并没有完全展示IeX的全部功能,读者假如彳爱好,可以接着深化阅读本文提供的参考文献。如何进行语法分析?我们在卜面的章节
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Flex Bison 使用教程 使用 教程
