姓名
学号
班 级
成 绩
设备名称软件环境
递降分析
实验目:
根某文法编制调试递降分析程序便意输入符号串进行分析次实验目加深递降分析法理解
二实验求:
列文法递降分析法意输入符号串进行分析:
(1)E>TG
(2)G>+TG|—TG
(3)G>ε
(4)T>FS
(5)S>*FS|FS
(6)S>ε
(7)F>(E)
(8)F>i
输出格式:
(1)递降分析程序编制:姓名学号班级
(2)输入#结束符号串(包括+—*()i#):位置输入符号串例:i+i*i#
(3)输出结果:i+i*i#合法符号串
备注:输入符号串i+i*#求输出非法符号串
注意:
1表达式中允许运算符(+*)分割符(括号)字符i结束符#
2果遇错误表达式应输出错误提示信息(该信息越详细越)
三实验程:
程序设计:
1模块设计:程序分成合理模块(函数)模块做具体事情
2写出(画出)设计方案:模块关系简图流程图全局变量函数接口等
程序编写:
1定义部分:定义常量变量数结构
2初始化:文件输入符号串输入字符缓区中
3利递降分析法非终结符编写函数函数中调文法开始符号函数
四实验结果
(1)程序流程图
(2)运行结果
示例程序:
#include
#include
#include
#include
char a[50] b[50]d[500]e[10]
char ch
int n1i10flag1n5
int E()
int E1()
int T()
int G()
int S()
int F()
void input()
void input1()
void output()
void main() *递分析*
{
int fpj0
char x
d[0]'E'
d[1]''
d[2]'>'
d[3]'T'
d[4]'G'
d[5]'#'
printf(递降分析程序编制:武普泉20号1020562班\n)
printf(输入#结束符号串(包括+ * ( ) i #长度50):)
do{
scanf(c&ch)
a[j]ch
j++
}while(ch'#')
n1j
chb[0]a[0]
printf(文法\t分析串\t\t\t分析字符\t\t剩余串\n)
fE1()
if(f0) return
if (ch'#')
{ printf(accept\n)
p0
xd[p]
{
printf(cx)pp+1xd[p] *输出推导式*
}
while(a[p]'#')
printf(ca[p++])
printf(合法字符\n)
}
else {
printf(error\n)
j0
while(a[j]'#')
printf(ca[j++])
printf(非法字符\n)
printf(回车返回\n)
getchar()getchar()
return
}
printf(\n)
printf(回车返回\n)
getchar()
getchar()
}
int E1()
{ int ft
printf(E>TG\t)
flag1
input()
input1()
fT()
if (f0) return(0)
tG()
if (t0) return(0)
else return(1)
}
int E()
{ int ft
printf(E>TG\t)
e[0]'E'e[1]''e[2]'>'e[3]'T'e[4]'G'e[5]'#'
output()
flag1
input()
input1()
fT()
if (f0)
return(0)
tG()
if (t0) return(0)
else return(1)
}
int T()
{ int ft
printf(T>FS\t)
e[0]'T'e[1]''e[2]'>'e[3]'F'e[4]'S'e[5]'#'
output()
flag1
input()
input1()
fF()
if (f0)
return(0)
tS()
if (t0) return(0)
else return(1)
}
int G()
{
int f
if(ch'+')
{
b[i1]ch
printf(G>+TG\t)
e[0]'G'e[1]''e[2]'>'e[3]'+'e[4]'T'e[5]'G'e[6]'#'
output()
flag0
input()input1()
cha[++i1]
fT()
if (f0)
return(0)
fG()
if(f0)
return 0
else return 1
}
else if(ch'')
{
b[i1]ch
printf(G>TG\t)
e[0]'G'e[1]''e[2]'>'e[3]''e[4]'T'e[5]'G'e[6]'#'
output()
flag0
input()input1()
cha[++i1]
fT()
if (f0)
{
printf(Gd\nf)
return(0)
}
fG()
if(f0)
return 0
else return 1
}
else
{
printf(G>^\t)
e[0]'G'e[1]''e[2]'>'e[3]'^'e[4]'#'
output()
flag1
input()input1()
return(1)
}
}
int S()
{
int ft
if(ch'*')
{
b[i1]ch
printf(S>*FS\t)
e[0]'S'e[1]''e[2]'>'e[3]'*'e[4]'F'e[5]'S'e[6]'#'
output()
flag0
input()input1()
cha[++i1]
fF()
if (f0)
return(0)
tS()
if (t0)
return(0)
else return(1)}
else if(ch'')
{
b[i1]ch
printf(S>FS\t)
e[0]'S'e[1]''e[2]'>'e[3]''e[4]'F'e[5]'S'e[6]'#'
output()
flag0
input()input1()
cha[++i1]
fF()
if (f0)
return(0)
tS()
if (t0)
return(0)
else return(1)}
else
{
printf(S>^\t)
e[0]'S'e[1]''e[2]'>'e[3]'^'e[4]'#'
output()
flag1
a[i1]ch
input()input1()
return(1)
}
}
int F()
{ int fint j
if(ch'(')
{
b[i1]ch
printf(F>(E)\t)
e[0]'F'e[1]''e[2]'>'e[3]'('e[4]'E'e[5]')'e[6]'#'
output()
flag0
input()input1()
cha[++i1]
fE()
if (f0) return(0)
if(ch')')
{
b[i1]ch
printf(F>(E)\t)
flag0input()input1()
cha[++i1]
}
else
{
printf(error\n)
j0
while(a[j]'#')
printf(ca[j++])
printf(非法字符\n)
return(0)
}
}
else if(ch'i')
{
b[i1]ch
printf(F>i\t)
e[0]'F'e[1]''e[2]'>'e[3]'i'e[4]'#'
output()
flag0input()input1()
cha[++i1]
}
else {
printf(error\n)
j0
while(a[j]'#')
printf(ca[j++])
printf(非法字符\n)
return(0)
}
return(1)
}
void input()
{
int j0
for (j
printf(\t\t\t)
printf(c\t\t\tch) *输出分析字符*
}
void input1()
{
int j
for (ji1+1flagj
printf(\n)
}
void output(){ *推导式计算*
int mkjq
int i0
m0k0q0
in
d[n]''d[n+1]'>'d[n+2]'#'nn+2in
ii2
while(d[i]'>'&&i0) ii1
ii+1
while(d[i]e[0]) ii+1
qi
mqkq
while(d[m]'>') mm1
mm+1
while(mq) {
d[n]d[m]mm+1nn+1
}
d[n]'#'
for(j3e[j]'#'j++){
d[n]e[j]
nn+1
}
kk+1
while(d[k]'') {
d[n]d[k]nn+1kk+1
}
d[n]'#'
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档