天津理工大学计算机网络Word下载.docx
- 文档编号:22710275
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:12
- 大小:86.83KB
天津理工大学计算机网络Word下载.docx
《天津理工大学计算机网络Word下载.docx》由会员分享,可在线阅读,更多相关《天津理工大学计算机网络Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
Token
字符数组,存放构成单词的字符串。
GetCH()
GetBC()
函数,检查CH中的字符是否为空格,若是,则调用GetCH直到CH中为一非空格。
Concat()
函数,把CH中的字符连接到Token中。
Letter()Digit()
函数,它们分别判断CH中的字符是否为字母和数字。
Reserve()
函数,对Token中的字符串查找关键字表,若它是一个关键字则回送相应内部编码,否则回送0。
Retract()
函数,把源程序缓冲区指针回退一个字符位置,并把CH置空白。
Buildlist()
将标识符登录到符号表或将常数登录到常数表。
Error()
出现非法字符,显示错误信息。
Token=‘’;
/*对token数组初始化*/
S=getch();
/*读入一个字符*/
Getbc();
/*滤除空白*/
Switch(s)
{
case‘a’:
case‘b’:
…
case‘z’:
while(letter()||digit())
concat();
/*将当前读入的字符送token数组*/
getch();
}
retract();
/*非字母或数字则扫描指针回退一个字符*/
c=reserve();
/*判断token是否为关键字,把返回值给c*/
if(c==0)/*若token是标识符*/
{
buildlist();
/*将标识符登录到符号表中*/
return(id,指向符号表入口指针);
else/*若token不是标识符*/
return(保留字,null);
break;
case‘0’:
case‘1’:
case‘9’:
while(digit())/*若当前读入的字符是数字*/
/*将当前读入的数字送token数组*/
retract();
/*非数字则扫描指针回退一个字符*/
buildlist();
/*将常数登录到常数表*/
return(num,num的常数表入口指针);
case‘+’:
return(‘+’,null);
break;
case‘-’:
return(‘-’,null);
case‘*’:
return(‘*’,null);
case‘<
’:
getch();
if(ch==‘=’)
return(relop,LE);
else
retract();
/*扫描指针回退一个字符*/
return(relop,LT)
}break;
case‘;
return(‘;
’,null);
default:
error();
}
六实验内容
题目:
用以下语言词法构造规则,来构造词法分析器。
词法分析器的功能是输入源程序,输出单词符号。
词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。
词法规则要求:
①识别保留字:
if、int、else、for、while、do、return、break、continue;
单词种别码为1。
②其他的都识别为标识符,标识符由字母开头,后面可以是数字、字母和下划线;
单词种别码为2。
③常数为无符号整形数,无符号的整数由数字开头,后面只包含数字;
单词种别码为3。
④运算符包括:
+、-、*、/、=、>
、<
、>
=、<
>
;
单词种别码为4。
⑤分隔符(界符)包括:
、;
、{、}、(、);
单词种别码为5。
程序输入/输出示例:
如源程序为C语言。
输入如下一段:
main()
{
inta,b;
a=10;
b=a+20;
要求输出如图:
(2,”main”)
(5,”(“)
(5,”)“)
(5,”{“)
(1,”int”)
(2,”a”)
(5,”,”)
(2,”b”)
(5,”;
”)
(4,”=”)
(3,”10”)
(4,”+”)
(3,”20”)
(5,”}“)
实验二语法分析器
4掌握语法分析方法的工作原理,理解它在整个编译原理中的作用。
5学会根据某一文法来求出分析表并且编制和调试语法分析程序,以便对任意输入的句子进行分析。
6掌握根据程序的伪代码来编写程序模块程序源代码。
二实验涉及到的知识要点(以LL
(1)分析为例)
LL
(1)分析法又称预测分析法,是一种不带回溯的非递归自上而下分析法。
LL
(1)分析法的基本思想是:
根据输入串的当前输入符号来惟一确定选用某条规则(产生式)来进行推导;
当这个输入符号与推导的第一个符号相同时,再取输入串的下一个符号,继续确定下一个推导应选的规则;
如此下去,直到推导出被分析的输入串为止。
一个LL
(1)分析器由一张LL
(1)分析表(也称预测分析表(、一个先进后出分析栈和一个控制程序(表驱动程序)组成。
三实验预习
LL
(1)分析法的功能是利用LL
(1)控制程序根据符号栈栈顶内容、输入串当前符号以及LL
(1)分析表,对输入符号串自上而下的分析过程。
LL
(1)文法的前提条件:
1LL
(1)文法首先是无二义性的,这一点可以从分析表不含多重定义入口得知。
2LL
(1)文法不含左递归。
必须首先消除文法的一切左递归。
还应该通过提取公共左因子来消除回溯。
3A为非终结符,A→a1|a2|…|an,FIRST(ai)∧FIRST(aj)=
(i≠j)
4④
∈FIRST(A),FIRST(A)∧FOLLOW(A)=
四实验要求
设计出模块结构、测试数据,初步编制好程序。
课下编写好源代码,上课时将源代码拷贝到实验室机器上调试,使其正确运行,如发现错误,修改完善。
程序流程图如下:
五程序结构
将“#”和文法开始符号依次压入栈中;
把第一个输入符号读入a;
do{把栈顶符号弹出并放入x中;
if(xVT)
{if(x==a)将下一个输入符号读入a;
elseerror();
else
if(M[A,a]=“x→y1y2…yk”)
{把yk、yk-1、…、y1压入栈中;
/*逆序依次*/
输出“x→y1y2…yk”;
elseerror();
}while(x!
=“#”)
六实验内容:
题目一:
有如下文法:
E→E+T|T
T→T*F|F
F→(E)|i
对此文法手工建立LL
(1)分析表,用LL
(1)分析法对任意输入的符号串进行分析。
程序的结果要求在屏幕输出:
(1)LL
(1)分析程序,编制人:
姓名,学号,班级
(2)输入以#结束的符号串(包括i+*()#):
在此位置输入符号串,例如:
i*(i+i)#
步骤
分析栈
剩余输入串
所用产生式
1
E
i*(i+i)#
E->
TE`
(3)输出过程如下:
(4)输入符号串为非法符号串(或者输入符号串为合法符号串)
程序结果的测试:
输入句子:
#i+i*i+i*(i+i)#
#i-i#
#(i+i)i*i#
题目二:
对此程序的功能进行扩充:
1对在分析过程中的错误,能定位找到错误。
2能分析出来错误的种类代码。
3能根据错误的种类和错误代码来修正错误。
附A:
实验报告书内容及格式要求
一、封面
《编译原理》实验报告
实验名称:
二级学院(系):
班级:
报告人姓名:
学号:
课程教师:
实验指导教师:
下达任务日期:
完成日期:
二实验报告书内容
1.实验项目概述(目的、任务、开发环境、参考资料)
2.实验项目设计的基本原理和采用的主要方法与技术
3.实验的过程与步骤
4.个人遇到的困难与获得的主要成果
5.测试与运行记录
6.实验项目总结
7.附录(软件配置、个人完成的程序模块和文档清单)
注:
实验报告着重说明个人所做工作、成果和体会,报告不得与他人雷同,否则影响成绩,严重者无成绩。
附B:
实验评分标准
实验成绩由
●实验出勤,
●题目一成绩,
●题目二成绩,
●和实验报告书的成绩组成。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 天津 理工大学 计算机网络