- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《编译原理》课程设计
目的
完成一个简化C语言——TINY C语言的编译程序,最终能为用TINY C语言编写的源程序(后缀为.tny)生成目标代码。要求有一些基本的数据结构和语言成分:
数据类型:整型、布尔类型;
算术运算符:+、-、*、/;
关系运算符:=、;
表达式:由以上数据类型及运算符构成
语句:条件语句(IF THEN ELSE END)、循环语句(REPEAT UNTIL)、赋值语句(:=)、读写语句(READ WRITE)。
步骤
1)、词法分析 2)、语法分析 3)、语义分析 4)、生成目标代码
源码构成
main.c 主程序
globals.h 全局类型及变量(如Token类属及语法树结点的数据组成)
util.h、util.c 各阶段用到的一些函数,如输出Token,生成各种语法树结点及输出语法树。
scan.c 词法分析程序
parse.c 语法分析程序
步骤1——词法分析
要求:填写getToken( )函数,完成词法分析器scan.c。
约定:
数仅包括整数类型,不包括实数类型
标识符由52个大小写英文字母组成,其识别按最长匹配原则
数后紧跟非数字,或标识符后紧跟非字母认为是一个新Token开始
由{ }括起来符号串都认为是注释部分,该部分在词法分析时被过滤掉。
识别出的Token由两个变量:currentToken,tokenString识别,其中currentToken代表Token的类属,为一个名为TokenType的枚举类型,在文件globals.h中定义;tokenString代表Token在程序中出现的形式,即其本来面目。例如整数10的currentToken为NUM,而tokenString为‘10’;标识符i的currentToken为ID,而tokenString为‘i’。
typedef enum
{ ENDFILE,ERROR,
IF,THEN,ELSE,END,REPEAT,UNTIL,READ,WRITE, /* 保留字 */
ID,NUM,
ASSIGN,EQ,LT,PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,SEMI
:= = + - * / ( ) ;
} TokenType;
画识别符合TINY C语言构词规则的DFA。然后用直接编码的方法构造词法分析器
/****************************************************/
/* File: scan.c */
/* The scanner implementation for the TINY compiler */
/****************************************************/
#include globals.h
#include util.h
#include scan.h
typedef enum
{ START, INASSIGN, INCOMMENT, INNUM, INID, DONE } StateType;
char tokenString[MAXTOKENLEN+1];
static int getNextChar(void) //获得下一字符
{实现请自己看scan.c文件}
static void ungetNextChar(void) //用于回吐字符
{实现请自己看scan.c文件}
static struct
{ char* str;
TokenType tok;
} reservedWords[MAXRESERVED]
= {{if,IF},{then,THEN},{else,ELSE},{end,END},
{repeat,REPEAT},{until,UNTIL},{read,READ},
{write,WRITE}}; //定义保留字表
static TokenType reservedLookup (char * s) //进行保留字的匹配
{实现请自己看scan.c文件}
/****************************************/
/* the primary function of the
您可能关注的文档
最近下载
- 价值2万的哲纳理论(初级)培训课件.pdf VIP
- 湖北省武汉市部分学校2025~2026学年度高三年级九月调研考试英语+答案.pdf VIP
- 高中历史《国别史专题一:英国》复习资料整理.docx VIP
- 手术室低值耗材管理.pptx VIP
- 音乐剧介绍课件.ppt VIP
- 哲纳理论20110109宝图老师1248整理形态.doc VIP
- 药品GMP文件 005称量记录.doc VIP
- 哲纳理论第一期级篇之失败格局.doc VIP
- 20210622-华泰证券-房地产行业:公募REITs系列研究之三,未来已来.pdf VIP
- 新解读《GB_T 20833.1 - 2021旋转电机 绕组绝缘 第1部分:离线局部放电测量》最新解读.pptx VIP
文档评论(0)