- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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 ([|]|(|)|{|}|.|-|++|--||*|+|-|~|!|/|%|||||=|=|==|!=|^|||||||?|:|;|...|=|*=|/=|%=|+=
您可能关注的文档
最近下载
- 2025年中国四氯化锆项目投资计划书.docx
- 八师兵团职工考试题库及答案.doc
- 健康保险的论文开题报告.docx VIP
- [自学考试密押题库与答案解析]高级英语自考题模拟2.docx VIP
- 基于利益相关者理论的企业协同发展战略研究.doc VIP
- 五年级上册英语教案Lesson 3 What Subject Do You Like Best? 川教版三年级起点.doc VIP
- 劳动通识课件 第5章 家庭劳动实践.pptx VIP
- 2025年四川省普通高中学业水平合格考数学试卷(补考)(含答案).pdf VIP
- DB13T 2501-2017 风力塔筒自动免爬器技术条件.pdf VIP
- 《建筑基桩检测技术规范2023》.pdf VIP
文档评论(0)