课程设计报告Word文件下载.docx
- 文档编号:19014117
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:41
- 大小:87.70KB
课程设计报告Word文件下载.docx
《课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《课程设计报告Word文件下载.docx(41页珍藏版)》请在冰豆网上搜索。
3
begin
Sy_begin
4
do
Sy_do
5
end
Sy_end
6
标识符
Ident
56
#
JingHao
10
;
Semicolon
8
+
Plus
34
*
Times
36
:
Becomes
38
(
lParent
48
)
rParent
49
二.词法分析程序设计
1.单词---------------Token序列
2.关键字等对照表
单词
if
…
3.画出自动机转换图
三.程序实现
1.数据结构
1structrWordsResWords[10]={{"
if"
Sy_if},
{"
do"
Sy_do},
{"
else"
Sy_else},
while"
Sy_while},
then"
Sy_then},
begin"
Sy_begin},
end"
Sy_end},
and"
op_and},
or"
op_or},
not"
op_not}};
定义单词数组。
{charsp[10];
intsy;
};
是对单词数组的数范围定义
2.staticintaction[19][13]=
{{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,ACC,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,7,-1,-1,-1},
{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,8},
{-1,-1,104,-1,-1,-1,104,-1,104,-1,104,-1,-1},
{-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,105,-1,13,-1,-1,-1,-1},
{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,14,-1},
{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,15,-1},
{-1,-1,103,-1,-1,-1,103,-1,103,-1,103,-1,-1},
{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,16},
{-1,-1,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,102,-1,-1,-1,102,-1,102,-1,102,-1,-1},
{-1,-1,-1,-1,-1,-1,106,-1,-1,-1,-1,-1,-1},
{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,18,-1},
{-1,-1,101,-1,-1,-1,101,-1,101,-1,101,-1,-1}
};
staticintaction1[10][7]=
{{3,-1,-1,2,-1,-1,1},
{-1,4,5,-1,-1,ACC,-1},
{3,-1,-1,2,-1,-1,6},
{-1,104,104,-1,104,104,-1},
{3,-1,-1,2,-1,-1,7},
{3,-1,-1,2,-1,-1,8},
{-1,4,5,-1,9,-1,-1},
{-1,101,5,-1,101,101,-1},
{-1,102,102,-1,102,102,-1},
{-1,103,103,-1,103,103,-1}
staticintaction2[16][11]=
{{1,-1,4,-1,5,-1,-1,-1,13,7,8},
{-1,2,-1,101,-1,101,101,101,-1,-1,-1},
{3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,102,-1,102,102,102,-1,-1,-1},
{1,-1,4,-1,5,-1,-1,-1,11,7,8},
{1,-1,4,-1,5,-1,-1,-1,6,7,8},
{-1,-1,-1,104,-1,9,10,104,-1,-1,-1},
{1,-1,4,-1,5,-1,-1,-1,14,7,8},
{1,-1,4,-1,5,-1,-1,-1,15,7,8},
{105,-1,105,-1,105,-1,-1,-1,-1,-1,-1},
{107,-1,107,-1,107,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,12,-1,9,10,-1,-1,-1,-1},
{-1,-1,-1,103,-1,103,103,103,-1,-1,-1},
{-1,-1,-1,-1,-1,9,10,ACC,-1,-1,-1},
{-1,-1,-1,106,-1,9,10,106,-1,-1,-1},
{-1,-1,-1,108,-1,9,10,108,-1,-1,-1}
staticintaction[19][13],staticintaction1[10][7],staticintaction2[16][11]:
是对SLR
(1)的定义
3.while(ss1==0&
&
ii<
nLength)
{if(!
strcmp(spe1,nTab1[ii]))ss1=1;
ii++;
}if(ss1==1)
returnii-1;
else
return-1;
}:
是以循环集组成的。
4.
structFourExp
{
charop[10];
structaaarg1;
structaaarg2;
intresult;
}fexp[200];
2.算法设计
1.voidScan是单词浏览的函数,扫描小写字母,将扫描的函数放入Identifer,还对数字进行扫描,放到number中。
若是‘=’放入Readch,查找是=等于。
2.EO是关系表达式的和取
3.eGn是一个四元式,nxp是四元式eGn的下标,将数据放入NXP中。
四.心得体会
通过本次实验,我了解到很多,开始不会设计,但是在我查阅资料和书籍之后,还有就是同学对我的帮助,我就成功的完成了程序的实现,知道了四元式是怎样实现的,而且还知道怎样通过四元式能够写出TIKEN的式子,知道四元式是怎么通过C++的只是实现的,这次试验我学到很多,以后会更加努力的。
第二部分语法分析
一.根据给定的文法画出算术表达式、布尔表达式、程序语句的LR(0)项目集规范族,验证上述的SLR分析表是否正确。
算术表达式的项目集规范族
I0:
S'
→.E
E→.E+E
E→.E*E
E→.(E)
E→.I
I2:
E→(.E)
I4:
E→E+.E
E→.i
I6:
E→(E.)
E→E.+E
E→E.*E
I8:
E→E*E.
E→E.+E
E→E.*E
I1:
→E.
E→.E+E
E→.E*E
E→.(E)
E→.i
I3:
E→i.
I5:
E→E*.E
I7:
E→E+E.
I9:
E→(E).
有错误,在6状态下当前输入符号为+时,应移进4状态,即s4.
布尔表达式的SLR
(1)分析表:
状态
ACTION
GOTO
i
rop
not
and
or
B
A
O
S1
S4
S3
13
7
S2
R1
R2
S5
11
R4
S9
S10
14
15
9
R5
R7
S12
12
R3
ACC
R6
R8
3)程序语句的项目集规范族
→.S
S→.ifethenSelseS
S→.whileedoS
S→.beginLend
S→.a
S→begin.Lend
L→.S
L→.S;
l
S→beginL.end
I12:
S→beginLend.
I16:
L→S;
L.
→S.
S→a.
L→S.
L→S.;
L
I13:
.L
I17:
S→ifethenSelse.S
S→if.ethenSelseS
S→ife.thenSelseS
I10:
S→ifethen.SelseS
I14:
S→ifethenS.elseS
I18:
S→ifethenSelseS.
S→while.edoS
S→whilee.doS
I11:
S→whileedo.S
I15:
S→whileedoS.
有错误,在0状态下当前输入符号为if时,应移进2状态,即s2
在0状态下当前输入符号为begin时,应移进4状态,即s4
二.语法分析程序的设计
1.分析框图,即程序之间的调用关系
2,四元式的结构形式。
100j>
a0102
101j0
102=1b
一共五列,
第一列为地址,在输出程序Disp2()中用temp1表示;
第二列是算符OP,存储在程序中fexp[temp1].op中;
第三列是第一操作数,存储在程序中的nTab1[fexp[temp1].arg1.pos]中;
第四列是第二操作数,存储在程序中的nTab1[fexp[temp1].arg2.pos]中;
第五列是出口,程序中用tr和fr分别存储真出口和假出口
3.程序实现
#include<
iostream>
string>
fStream>
usingnamespacestd;
constintACC=-2;
constintSy_if=0;
constintSy_then=1;
constintSy_else=2;
constintSy_while=3;
constintSy_begin=4;
constintSy_do=5;
constintSy_end=6;
constinta=7;
constintSemicolon=8;
constinte=9;
constintJingHao=10;
constintS=11;
constintL=12;
constintTempsy=15;
constintEA=18;
constintEO=19;
constintPlus=34;
constintTimes=36;
constintBecomes=38;
constintop_and=39;
constintop_or=40;
constintop_not=41;
constintrop=42;
constintlParent=48;
constintrParent=49;
constintident=56;
constintintConst=57;
charch='
\0'
;
intCount=0;
staticcharSpelling[10]={"
"
staticcharLine[81]={"
char*Pline;
staticcharnTab1[100][10];
structnTab
inttc;
intfc;
}nTab2[200];
intLabel=0;
structrWords
charsp[10];
intsy;
structrWordsResWords[10]={{"
{"
structaa
intsy1;
intpos;
}buf[1000],n,n1,E,sstack[100],ibuf[100],stack[1000];
structaaoth1;
intssp=0;
structaa*pbuf=buf;
intnLength=0;
intLnum=0;
inttt1=0;
ifstreamcfile("
pas.cpp"
);
ofstreammfile("
pas.txt"
intnewt=0;
intnxq=100;
intIr;
intIr1;
intsp=0;
intstack1[100];
intsp1=0;
intnum=0;
structll
intnxq1;
inttc1;
intfc1;
}LabelMark[10];
intLabelTemp[10];
intPointMark=-1,PointTemp=-1;
intsign=0;
staticintaction[19][13]=
voidReadLine()
charch1;
Pline=Line;
ch1=cfile.get();
while(ch1!
='
\n'
{
*Pline=ch1;
Pline++;
ch1=cfile.get();
}
*Pline='
}
voidReadch()
if(ch=='
ReadLine();
L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告