- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理机指导
第一部分 词法分析
实验一、简单的扫描器设计
一、实验目的:熟悉并实现一个简单的扫描器
二、实验内容:
设计扫描器的自动机;
设计翻译、生成Token的算法;
编写代码并上机调试运行通过。
·要求:输入——源程序文件;
输出——(1)相应的Token序列;
(2)关键字、界符表,符号表,常数表。
三、扫描器设计:
单词 Token
自动机:
空 l/d 关键字表和界符表
l -1
① ②- 单词 编码
d program 3
d -1 procedure 4
③ ④- begin 5
+ end 6
⑤- while 7
* do 8
⑥- + 9
: = * 10
⑦ ⑧- : 11
-1 := 12
⑨- = 13
…… , 14
, ; 15
⑩-
-1
-
关键字表和界符表:
四、程序实现:
1.数据结构:
char ch; //当前字符
char strToken[]; //当前单词
char *keywords[]={“program”, “procedure”, “begin”,……}; //关键字表、界符表
char ID[][]; //符号表
int Cons[]; //常数表
struct TokenType
{ int code,value; }
struct TokenType Token[]; //Token数组
2.算法设计:
初始化;
滤除空格,读取第一个非空字符到ch;
if (ch是一个字母)
处理关键字或标识符;
5. else if (ch是一个数字)
6. 处理常数;
else
7. 处理界符或错误处理;
3.算法求精:
·step2 :
ch=GetChar(); //读取当前字符到ch
while (ch==’ ‘)
ch=GetChar();
·step3:
int IsLetter(char ch) //判断ch是否为字母
原创力文档


文档评论(0)