- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
9.1 LEX/YACC程序设计简介 LEX/YACC帮助完成的是语言结构的分析而不是语义的处理。利用LEX/YACC编写编译器有两点同等重要:按照LEX/YACC提供的格式进行文法的设计(包括正规式和产生式);利用LEX/YACC提供的语义接口进行语义处理的程序设计。也就是说,LEX源程序*.l和YACC源程序*.y是文法和C/C++程序语句的混合体,因此编写出好的LEX和YACC源程序就需要了解LEX/YACC的语言规定和它们的工作原理。 关于这方面的内容,UNIX系统中均有介绍,另外我们在《编译原理基础》的后继教材《编译原理与技术》中也会有较为详细的讨论,同时有兴趣的读者还可以参考由Schreiner Axel T.编写,Prentice-Hall出版的“Introduction to Compiler Construction With UNIX”。 这里仅就LEX/YACC的基本工作原理和LEX/YACC源程序的基本结构做一简单介绍,以使读者对使用LEX/YACC构造编译器的方法有一个初步了解,帮助读者阅读理解LEX/YACC源程序并且可以以源程序的框架为基础进行其它应用系统的LEX/YACC程序设计。 LEX和YACC的程序结构和工作原理是相似的,相似处以LEX为例。 1.LEX源程序结构与LEX的正规式 LEX源程序基本结构如下: [声明(declaration)] %% 翻译规则(translation rules) [%% 用户定义子程序(user defined routines)] 它由声明、翻译规则和用户定义子程序三部分组成并且用双百分号%%进行分隔,方括号中的声明和用户定义子程序两部分可以省略,只有翻译规则是必须的,用以规定所构造的词法分析器的正规式。 LEX提供的所有正规式形式如下所示,灵活地应用它们是构造词法分析器的关键。 语法 语义 (1)? x 匹配字符或字符串x。 (2) ?x 匹配字符或字符串x。 (3) ?\x 匹配字符x自身,如\+(匹配+);或C中的转义字符,如\t,\n等。 (4) ?[xy] 匹配或者字符x或者字符y。 (5) ?[x–z] 匹配字符x,y或z,“–”表示一个范围,并且要求“–”左边字符小于右 边字符,否则出错。当–表示其本身时,要放在方括号的最左或最右。 (6) ?[^x] 匹配除x以外的任何一个字符,x可以是若干字符,如 [^ \t\n]表示除空 格、制表符和换行以外的其它字符。 (7) ?. 匹配除换行以外的任何其它字符。 (8)? x* 正规式x的闭包。 (9) ?x+ 正规式x的正闭包(closure-plus)。 (10)? x|y 匹配或者正规式x或者正规式y。 (11)?(x) 匹配正规式x本身,()用来改变运算优先级。 (12)? x? 表示正规式x是可省略的。该正规式与x|ε等价,其中ε表示空。 (13) ?^x 匹配一行开始处的正规式x,如^ABCabcABC中第一个ABC。 (14) ?x$ 匹配一行结束处的正规式x,如^ABCabcABC中第二个ABC。 (15) ?x/y 匹配其后紧跟正规式y之后的正规式x,如[0–9]+/.EQ. 识别输入串 35.EQ.I中的35。注意:x$与x/\n等价。 (16) ?yx 匹配处于开始条件y时的正规式x。 (17) ?x{m, n} 匹配m到n个正规式x,如ab{3,5}识别:ababab,abababab或 ababababab等。 YACC源程序的结构与LEX基本相同,但是它的翻译规则部分不是正规式而是产生式。YACC的产生式形式比较简单,与教材中的产生式形式基本一致,读者通过阅读YACC源程序不难理解。 2.LEX编译器输出的C程序结构 LEX编译器对声明中的辅助定义和翻译规则进行分析,构造出表驱动型的词法分析器,再添加上LEX源程序中的C语言部分,形成一个完整的C程序文件(XDCFLEX编译后输出的文件名是yylex.c,其中的词法分析器函数名是yylex()),它们由如下几部分顺序组成: 声明的C语言部分 词法分析表 分析表的驱动器(yylex()) 用户定义子程序 了解LEX工作原理的最好方法是编写一个简单的LEX源程
您可能关注的文档
- 边做边学——Photoshop+Illustrator综合实训教程 配套习题 作者 马丹 姚磊磊 8.doc
- 边做边学——Photoshop+Illustrator综合实训教程 配套习题 作者 马丹 姚磊磊 9.doc
- 边做边学——Photoshop+Illustrator综合实训教程 配套习题 作者 马丹 姚磊磊 10.doc
- 边做边学——Photoshop+Illustrator综合实训教程 配套习题 作者 马丹 姚磊磊 11.doc
- 边做边学——Premiere Pro CS3视频编辑案例教程 教学大纲作者 杨剑涛 23950 边做边学—Premiere Pro CS3视频编辑案例教程教学大纲.doc
- 边做边学——Premiere Pro CS3视频编辑案例教程 教学课件 作者 杨剑涛 01.ppt
- 边做边学——Premiere Pro CS3视频编辑案例教程 教学课件 作者 杨剑涛 02.ppt
- 边做边学——Premiere Pro CS3视频编辑案例教程 教学课件 作者 杨剑涛 03.ppt
- 边做边学——Premiere Pro CS3视频编辑案例教程 教学课件 作者 杨剑涛 04.ppt
- 边做边学——Premiere Pro CS3视频编辑案例教程 教学课件 作者 杨剑涛 05.ppt
- 编译原理基础——习题与上机题解答 教学课件 作者 刘坚 第6 10章 第10章.ppt
- 编译原理及实现技术 教学课件 作者 刘磊 编译原理总结.ppt
- 编译原理及实现技术 教学课件 作者 刘磊 第01章 编译引论.ppt
- 编译原理及实现技术 教学课件 作者 刘磊 第02章 形式语言与自动机理论.ppt
- 编译原理及实现技术 教学课件 作者 刘磊 第03章 词法分析.ppt
- 编译原理及实现技术 教学课件 作者 刘磊 第04章 语法分析 自顶向下分析方法.ppt
- 编译原理及实现技术 教学课件 作者 刘磊 第05章 语法分析 自底向上分析方法.ppt
- 编译原理及实现技术 教学课件 作者 刘磊 第06章 语义分析和符号表.ppt
- 编译原理及实现技术 教学课件 作者 刘磊 第07章 中间代码生成.ppt
- 编译原理及实现技术 教学课件 作者 刘磊 第08章 中间代码优化.ppt
文档评论(0)