编译原理基础——习题与上机题解答 教学课件 作者 刘坚 第6 10章 第9章.pptVIP

编译原理基础——习题与上机题解答 教学课件 作者 刘坚 第6 10章 第9章.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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源程

您可能关注的文档

文档评论(0)

118压缩包课件库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档