语法分析程序
来源:互联网 发布:整容软件 编辑:程序博客网 时间:2024/06/05 11:16
一、实验目的
编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。
二、实验要求
利用C语言编制递归下降分析程序,并对简单语言进行语法分析。
2.1 待分析的简单语言的语法
用扩充的BNF表示如下:
⑴<程序>::=begin<语句串>end
⑵<语句串>::=<语句>{;<语句>}
⑶<语句>::=<赋值语句>
⑷<赋值语句>::=ID:=<表达式>
⑸<表达式>::=<项>{+<项> | -<项>}
⑹<项>::=<因子>{*<因子> | /<因子>
⑺<因子>::=ID | NUM | (<表达式>)
2.2 实验要求说明
输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。
例如:
输入 begin a:=9; x:=2*3; b:=a+xend #
输出 success!
输入 x:=a+b*c end #
输出 error
2.3 语法分析程序的酸法思想
(1)主程序示意图如图2-1所示。
图2-1 语法分析主程序示意图
(2)递归下降分析程序示意图如图2-2所示。
(3)语句串分析过程示意图如图2-3所示。
调用statement函数
否
是
调用scaner
否
是
调用scaner
否
调用statement函数
是
否
图2-3 语句串分析示意图
是
打印分析成功
出错处理
图2-2 递归下降分析程序示意图
(4)statement语句分析程序流程如图2-4、2-5、2-6、2-7所示。
否
否
否 是
调用scaner
出错处理
图2-4 statement语句分析函数示意图 图2-5 expression表达式分析函数示意图
是
否 否
是
是
否
否
是
调用expression函数
图 2-6 term分析函数示意图
否
出错处理
调用scaner
调用scaner
是
图2-7 factor分析过程示意图
三、部分程序代码:
lrparser()
{
if(syn==1)
{
scaner(); /*读下一个单词符号*/
yucu(); /*调用yucu()函数;*/
if (syn==6)
{ scaner();
if ((syn==0)&&(kk==0))
printf("success!\n");
}
else { if(kk!=1) printf("the string haven't got a'end'!\n");
kk=1;
}
}
else { printf("haven't got a 'begin'!\n");
kk=1;
}
return;
}
yucu()
{
statement(); /*调用函数statement();*/
while(syn==26)
{
scaner(); /*读下一个单词符号*/
if(syn!=6)
statement(); /*调用函数statement();*/
}
return;
}
statement()
{ if(syn==10)
{
scaner(); /*读下一个单词符号*/
if(syn==18)
{ scaner(); /*读下一个单词符号*/
expression(); /*调用函数statement();*/
}
else { printf("the sing ':=' is wrong!\n");
kk=1;
}
}
else { printf("wrong sentence!\n");
kk=1;
}
return;
}
expression()
{ term();
while((syn==13)||(syn==14))
{ scaner(); /*读下一个单词符号*/
term(); /*调用函数term();*/
}
return;
}
term()
{ factor();
while((syn==15)||(syn==16))
{ scaner(); /*读下一个单词符号*/
factor(); /*调用函数factor(); */
}
return;
}
factor()
{ if((syn==10)||(syn==11)) scaner();
else if(syn==27)
{ scaner(); /*读下一个单词符号*/
expression(); /*调用函数statement();*/
if(syn==28)
else { printf("the error on '('\n");
kk=1;
}
}
else { printf("the expression error!\n");
kk=1;
}
return;
}
- 语法分析程序
- 语法分析程序
- 语法分析程序
- 编写语法分析程序
- LL(1)语法分析程序
- 输入输出LL(1)语法分析程序
- 语法分析
- 语法分析
- 语法分析
- 语法分析
- 语法分析
- 语法分析
- 语法分析
- 语法分析
- 语法分析
- 语法分析
- 语法分析
- 语法分析
- UVa 152 - Tree's a Crowd
- freeswitch 接通后再录音
- 冒泡排序原理解析
- JSTL
- 在命令行编译和调试Swift程序
- 语法分析程序
- 《机器学习实战》之K-近邻算法
- linux下Oracle11g RAC搭建(八)
- 【面试】一系列 动态规划
- TCP和Http的区别!(转)
- 两个栈实现一个队列——C++ 利用STL 栈stack实现
- 部署DenyHosts防SSH暴力破解
- 【sublime test2 2.02】如何中文显示
- 图片放大最后的一点理解