- 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,词法分析器能够识别简单语言的单词符号
,识别出并输出简单语言的基本字 . 标示符 . 无符号整数 . 运算符 . 和界符。
、实验要求: 给出一个简单语言单词符号的种别编码词法分析器
四、实验原理:
1、词法分析程序的算法思想
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。
2、程序流程图
( 1)主程序
输入要分析的语句
判断读入字符是否为“ #”
调用扫描、分析程序
( 2)扫描子程序
Token 清
Get()
当前字符
标示符 常数 表中查找 结束
Error
基本字 用户标示符
输 出 二
结
3、各种单词符号对应的种别码
单词符号
种别码
助记符
内码值
while
1
while
-
if
2
if
-
else
3
else
-
switch
4
switch
-
case
5
case
-
标识符
6
id
id 在符号表中的
位置
常数
7
num
num在常数表中的
位置
+
8
+
-
-
9
-
-
*
10
*
-
=
11
relop
LE
11
relop
LT
==
11
relop
EQ
=
12
=
-
;
13
;
-
五、实验内容:
1、实验分析
编写程序时,先定义几个全局变量 a[] 、 token[] (均为字符串数
组),c,s( char 型) ,i,j,k (int 型),a[] 用来存放输入的字符串, token[]
另一个则用来帮助识别单词符号, s 用来表示正在分析的字符。字符串输入
之后,逐个分析输入字符, 判断其是否 ‘#’,若是表示字符串输入分析完毕,
结束分析程序,若否则通过 int digit(char c) 、int letter(char c) 判断
其是数字,字符还是算术符 , 分别为用以判断数字或字符的情况,算术符的
判断可以在 switch 语句中进行,还要通过函数 int lookup(char token[])
来判断标识符和保留字。
实验词法分析器源程序:
#include stdio.h
#include math.h
#include string.h
int i,j,k;
char c,s,a[20],token[20]={0};
int letter(char s){
if((s=97)(s=122)) return(1);
else return(0);
}
int digit(char s){
if((s=48)(s=57)) return(1);
else return(0);
}
void get(){
s=a[i];
i=i+1;
}
void retract(){
i=i-1;
}
int lookup(char token[20]){ if(strcmp(token,while)==0) return(1); else if(strcmp(token,if)==0) return(2); else if(strcmp(token,else)==0) return(3); else if(strcmp(token,switch)==0) return(4); else if(strcmp(token,case)==0) return(5); else return(0);
}
void main()
{
printf(please input string :\n);
i=0;
do{i=i+1;
scanf(%c,a[i]);
}while(a[i]!=#);
i=1;
j=0;
get();
while(s!=#){ memset(token,0,20);
switch(s)
{
case a:
case b:
case c:
case d:
case e:
case f:
case g:
case h:
case i:
case j:
case k:
case l:
case m:
case n:
case o:
case p:
case q:
case r:
case s:
case t:
case u:
case v:
case w:
case x:
case y:
case z:
while(letter(s)||digit(s))
{token[j]=s;
j=j+1;
get();
}
retract();k=lookup(token);
if(k==0)
printf((%d,%s),6,token);
else printf((%d,-),k);
break;
case 0:
case 1:
case 2:
c
您可能关注的文档
最近下载
- 城市轨道交通AFC系统65课件.pptx VIP
- 2025年云南省交通投资建设集团有限公司校园招聘笔试备考题库及答案解析.docx VIP
- 建筑工地基孔肯雅热防控和应急方案.docx VIP
- 第3章 知觉和模式识别.ppt VIP
- 公开课饮酒其五省公开课一等奖全国示范课微课金奖课件.pptx VIP
- 第二单元 6~10的认识和加、减法 单元教学设计 2025人教版数学一年级上册.pdf
- 钢筋混凝土管管道吊装方案.doc VIP
- 中医操作评分标准.pdf VIP
- 5.1 探究过氧化钠与二氧化硫的反应 课件 高一下学期化学人教版(2019)必修第二册.pptx VIP
- 农广校说课大赛.pptx VIP
文档评论(0)