- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译器的自动生成工具LEX和YACC的使用方法
词法分析程序产生器LEX的用法
1.1 Lex概述
Lex是一个词法分析器(扫描器)的自动产生系统,它的示意图如图1.1。Lex源程序是用一种面向问题的语言写成的。这个语言的核心是正规表达式,用它描述输入串的词法结构。在这个语言中用户还可以描述当某一个词形被识别出来时要完成的动作,例如在高级语言的词法分析器中,当识别出一个关键字时,它应该向语法分析器返回该关键字的内部编码。Lex并不是一个完整的语言,它只是某种高级语言(称为lex的宿主语言)的扩充,因此lex没有为描述动作设计新的语言,而是借助其宿主语言来描述动作。我们只介绍C作为lex的宿主语言时的使用方法,在Unix系统中, FORTRAN语言的一种改进形式Ratfor也可以做lex的宿主语言。
图1.1 Lex示意图??? Lex自动地表示把输入串词法结构的正规式及相应的动作转换成一个宿主语言的程序,即词法分析程序,它有一个固定的名字yylex,在这里yylex是一个C语言的程序。yylex将识别出输入串中的词形,并且在识别出某词形时完成指定的动作。?看一个简单的例子:写一个lex源程序,将输入串中的小写字母转换成相应的大写字母。程序如下:
%%
[a-z] printf(“%c”,yytext[0]+A-a);
上述程序中的第一行%%是一个分界符,表示识别规则的开始。第二行就是识别规则。左边是识别小写字母的正规式。右边就是识别出小写字母时采取的动作:将小写字母转换成相应的大写字母。?Lex的工作原理是将源程序中的正规式转换成相应的确定有限自动机,而相应的动作则插入到yylex中适当的地方,控制流由该确定有限自动机的解释器掌握,对于不同的源程序,这个解释器是相同的。
1.2 lex源程序的格式
lex源程序的一般格式是:
{辅助定义的部分}???? %%
???? {识别规则部分}
%%
???? {用户子程序部分}
其中用花括号起来的各部分都不是必须有的。当没有“用户子程序部分”时,第二个%%也可以省去。第一个%%是必须的,因为它标志着识别规则部分的开始,最短的合法的lex源程序是:
?%%
??它的作用是将输入串照原样抄到输出文件中。??识别规则部分是Lex源程序的核心。它是一张表,左边一列是正规式,右边一列是相应的动作。下面是一条典型的识别规则:
integer printf(found keywcrd INT);
这条规则的意思是在输入串中寻找词形“integer”,每当与之匹配成功时,就打印出 “found keyword INT”这句话。
注意在识别规则中,正规式与动作之间必须用空格分隔开。动作部分如果只是一个简单的C表达式,则可以写在正规式右边同一行中,如果动作需要占两行以上,则须用花括号括起来,否则会出错。上例也可以写成:
integer {printf(found keyword INT);}?
下面先介绍识别规则部分的写法,再介绍其余部分。
1.3 Lex用的正规式
一个正规式表示一个字符串的集合。正规式由正文字符与正规式运算符组成。正文字符组成基本的正规式,表示某一个符号串;正规式运算符则将基本的正规式组合成为复杂的正规式,表示字符串的集合。
例如:
ab
仅表示字符串ab,而
(a b)+
表示字符串的集合:
{ab,abab,ababab,…}。
Lex中的正规式运算符有下列十六种:
???? “ \ [ ] ^ - ? ? * + | () / $ { } %
上述运算符需要作为正文字符出现在正规式中时,必须借助于双引号”或反斜线\,具体用法是;
xyz“++”或xyz\+\+
表示字符串xyz++
为避免死记上述十多个运算符,建议在使用非数字或字母字符时都用双引号或反斜线。要表示双引号本身可用\”,要表示反外线用”\”或\\
前面说过,在识别规则中空格表示正规式的结束,因此要在正规式中引进空格必须借助双引号或反斜线,但出现在方括号[]之内的空格是例外。
几个特殊符号:
\n是回车换行(newline)
\t是tab
?\b是退格(back space)
下面按照运算符的功能分别介绍上述正规式运算符。
字符的集合
用方括号对可以表示字符的集合。正规式
?[a b c]
与单个字符a或b或c匹配在方括号中大多数的运算符都不起作用,只有\、- 和 ^ 例外。运算符 - 表示字符的范围,例如
[a-z 0-9 <>_ ]
表示由所有小写字母,所有数字、尖括号及下划线组成的字符集合。如果某字符集合中包括-在内,则必须把它写在第一个或最后一个位置上,如
[-+0-9]
与所有数字和正负号匹配。
在字符集合中,运算符^必须写在第一个位置即紧接在左方括号之后,它的作用是求方
您可能关注的文档
- 笔记本电脑维修知识大全..docx
- 笔记本电脑整机优化方案..doc
- 笔记-化工仪表及自动化教材(廖燕明主讲)1-17(50)..docx
- 闭路电视监控教学模拟系统实训指导书..docx
- 闭路电视监控系统介绍..doc
- 闭路电视系统工程施工组织设计方案..doc
- 闭路监控系统方案书..doc
- 闭路监控系统设计方案1..doc
- 闭路视频监控方案..doc
- 闭式二级圆柱斜齿减速器说明书..doc
- 课件春下册英冀教版unit 5 love learning english课后作业.pdf
- 讲稿文案精英p4ita310.pdf
- 供应链与供应商绩效管理.pdf
- unit 11单元整体教学设计-大七级英语下册同步备课系列人教版.pdf
- 分散数据共享网络bottos whitepaper english final.pdf
- panther摘要计划描述401k summary plan.pdf
- 画法几何系秋季讲.pptx
- 课件春下册英冀教版unit 5 love learning english课后作业.pptx
- imaging of drug-induced complications system药物诱导系统并发症成像.pdf
- xjgc erp项目培训材料层sd v1.pptx
最近下载
- 学校是我家清洁靠大家主题班会PPT课件.ppt VIP
- 2025年广东省汕头市中考作文猜题及范文分析.pdf
- AutoCAD软件二次开发:AutoLISP编程入门.pdf
- 自考操作系统知识点..doc VIP
- 2024年深圳市深大附中小升初入学分班考试数学模拟试卷附答案解析优质 完整版727635831.pdf
- 儿科学教学课件:地中海贫血 (珠蛋白生成障碍性贫血).pptx
- 基于CCD的管状产品尺寸检测.doc
- 2022年全国中小学信息技术创新与实践大赛考试参考题库(全真题库).pdf VIP
- 听力与言语康复学基础知识单选题100道及答案解析.docx VIP
- 2025年江西工业贸易职业技术学院单招职业技能考试题库及答案.docx
文档评论(0)