编译原理:词法分析实验.pdfVIP

  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文档。上传文档
查看更多
编译原理:词法分析实验 实验⽬的: (1)熟悉 C 语⾔的词法规则,了解编译器词法分析器的主要功能和实现技术,掌握典型词法分析器构造⽅法,设计并实现 C 语⾔词法分 析器; (2)了解 Flex ⼯作原理和基本思想,学习使⽤⼯具⾃动⽣成词法分析器; (3)掌握编译器从前端到后端各个模块的⼯作原理,词法分析模块与其他模块之间的交互过程。 实验内容: 根据 C 语⾔的词法规则,设计识别 C 语⾔所有单词类的词法分析器的确定有限状态⾃动机,并使⽤ Java、C\C++或者 Python 其中任何 ⼀种语⾔,采⽤程序中⼼法或者数据中⼼法设计并实现词法分析器。词法分析器的输⼊为 C 语⾔源程序,输出为属性字流。 实验要求: 基于⽰例实现,对于如下的测试程序 scanner_example.c: int sum(int a, int b) { return a + b; } 输出的属性字流存储在 scanner_example.tokens ⽂件中,具体内容见下: [@0,0:2= ‘int’, ‘int’,1:0] [@1,4:6= ‘sum’,,1:4] [@2,8:8=’(’,’(’,1:8] [@3,10:12= ‘int’, ‘int’,1:10] [@4,14:14= ‘a’,,1:14] [@5,16:16=’,’,’,’,1:16] [@6,18:20= ‘int’, ‘int’,1:18] [@7,22:22= ‘b’,,1:22] [@8,24:24=’)’,’)’,1:24] [@9,26:26=’{’,’{’,1:26] [@10,28:33= ‘return’, ‘return’,1:28] [@11,35:35= ‘a’,,1:35] [@12,37:37=’+’,’+’,1:37] [@13,39:39= ‘b’,,1:39] [@14,41:41=’;’,’;’,1:41] [@15,43:43=’}’,’}’,1:43] [@16,47:46=’’,,2:0] 在这个输出的 token 流中,每⾏为⼀个 token,以@开头的数字表⽰ token 的序号,紧接着的 xx:xx 表⽰ token ⽂本对应的开始列和结束 列, “=”后⾯给出了这个范围之内 token 的具体⽂本, “”之内表⽰ token 的类型,最后⼀个数字对 xx:xx 表⽰起始⾏和起始列。需 要说明的是,在这个例⼦中,运算符等的类型就是其⾃⾝,属性流的最后放置了⼀个 “EOF”表⽰属性字的结束位置。 本实验所⽤到的⼯具是flex,,,,代码见下: %{ #include stdio.h #include stdlib.h #include string.h int toke=0; int line=0; int len ,fin ; FILE *fp ; %} DIGIT [0-9] OINTEGER [1-9]{DIGIT}* INTEGER (+|-)?{DIGIT}+ DECIMAL {INTEGER}.{DIGIT}+ FLOAT {INTEGER}.{DIGIT}+(e((+|-){OINTEGER})?)? LETTER [a-zA-Z] IDENTIFIER ({LETTER} |_)({LETTER} |_ |{DIGIT})* COMMENT (/*|*).* KEYWORD (auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register| restrict|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while) BRACKET ([|]|(|)|{|}|.|-|++|--||*|+|-|~|!|/|%|||||=|=|==|!=|^|||||||?|:|;|...|=|*=|/=|%=|+= BRACKET ([|]|(|)|{|}|.|-|++|--||*|+|-|~|!|/|%|||||=|=|==|!=|^|||||||?|:|;|...|=|*=|/=|%=|+=

文档评论(0)

文库垃圾佬 + 关注
实名认证
文档贡献者

这个人很懒

1亿VIP精品文档

相关文档