最新编译原理语法分析Word下载.docx
《最新编译原理语法分析Word下载.docx》由会员分享,可在线阅读,更多相关《最新编译原理语法分析Word下载.docx(24页珍藏版)》请在冰豆网上搜索。
//用户所定义的标识符的值
intl;
//记录换行符的个数,即记录源文件的行数
}yufa0,yufa1,yufa2[1000];
//yufa1用于保存各个单词,yufa1用于词法分析过程;
yufa0主要用于语法分析;
charch;
intmm=0;
//结构体数组下标
intline=0;
//出错位置
//charch='
'
;
stringkey[15]={"
begin"
"
end"
if"
then"
else"
while"
write"
read"
"
do"
call"
const"
var"
procedure"
program"
odd"
};
//预设保留字
voidprog();
voidblock();
voidcondecl();
void_const();
voidvardecl();
voidproc();
voidbody();
voidstatement();
voidlexp();
voidexp();
voidterm();
voidfactor();
voiderror0()
cout<
<
"
program标示符出错"
<
endl;
exit(0);
//出错即退出
}
voiderror1()
第"
line<
行缺少分号"
voiderror2()
行标识符(变量名)出错"
voiderror3()
常量未声明(缺少const)"
voiderror4()
常量未赋值"
voiderror5()
赋值号出错或者缺少赋值号"
voiderror6()
line<
变量未声明(缺少var)"
voiderror7()
行缺少右括号"
voiderror8()
行缺少左括号"
voiderror9()
行缺少参数"
voiderror10()
行procedure错误"
voiderror11()
行缺少end(begin与end不匹配)"
voiderror12()
行缺少then(if与then不匹配)"
voiderror13()
行缺少do(while与do不匹配)"
voiderror14()
行调用过程缺少标识符"
voiderror15()
voiderror16()
行条件语句出错(缺少界符)"
voidprog()//程序的递归子程序实现
line++;
if(yufa0.SYM=="
)//program
{
mm++;
yufa0.SYM=yufa2[mm].SYM;
if(yufa0.SYM=="
biaoshifu"
)//<
id>
即标识符
{
mm++;
if(yufa0.SYM=="
)//;
{
mm++;
block();
}
elseerror1();
//缺少;
}
elseerror2();
//缺少标识符或者标识符错误
}
elseerror0();
\n\n--------------------------语法分析结束------------------------\n\n"
voidblock()//程序体的递归子程序实现,<
block>
→[<
condecl>
][<
vardecl>
proc>
]<
body>
)
condecl();
vardecl();
proc();
body();
voidcondecl()//常量说明的递归子程序实现,<
→const<
const>
{,<
};
)//const
_const();
//<
while(yufa0.SYM=="
"
)//,逗号
_const();
}//<
elseerror1();
elseerror3();
//缺少常量定义const
void_const()//常量,<
→<
:
=<
integer>
fuzhi"
didit"
elseerror4();
//常量未赋值
elseerror5();
//缺少赋值号,或者赋值号错误
elseerror2();
//缺少标识符
voidvardecl()//变量说明的递归子程序实现,<
→var<
)
)//<
while(yufa0.SYM=="
)//,
//下一单词
if(yufa0.SYM=="
{
mm++;
}
elseerror2();
//缺少标识符即缺少变量
}//下一单词
elseerror2();
elseerror6();
//变量未声明
voidproc()//<
→procedure<
(<
});
{;
)//procedure
("
)//(
)//<
while(yufa0.SYM=="
)//,
{
mm++;
if(yufa0.SYM=="
{
mm++;
}
elseerror2();
}
)"
)//)
if(yufa0.SYM=="
)//;
//下一单词---------