语法分析-编译原理-语法分析
1、 实验内容或题目
编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。
2、实验目的与要求
利用C语言编制递归下降分析程序,并对简单语言进行语法分析。
3、 实验步骤与源程序
⑴ 实验步骤
1.待分析的简单语言的语法
用扩充的BNF表示如下:
①<程序>::=begin<语句串>end
②<语句串>::=<语句>{;<语句>}
③<语句>::=<赋值语句>
④<赋值语句>::=ID:=<表达式>
⑤<表达式>::=<项>{+<项>|-<项>}
⑥<项>::=<因子>{*<因子>|/<因子>}
⑦<因子>::=ID|NUM|(<表达式>)
2.试验要求说明
输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则,输出“error”。
例如:
输入 begin a:=9;x:=2*3;b:= a + x end #
输出 success
输入 x:= a + b * c end #
输出 error
3.语法分析程序的算法思想
①主程序示意图如下图
图C.3语法分析主程序示意图
②递归下降分析程序示意图如下图
图C.4递归下降分析程序示意图
③语句串分析过程示意图如下图
图C.5 语句串分析示意图
④statement语句分析函数流程如图C.6、图C.7、图C.8、图C.9所示。
图C.9 factory分析函数示意图
⑵ 源代码
# include <stdio.h>
# include <string.h>
char prog[80],token[8];
char ch;
int syn,p,m,n,sum=0,kk;
char *rwtab[6]={"begin","if","then","while","do","end"};
void scaner();
Irparser();
yucu();
statement();
expression();
term();
factor();
void main()
{
p=0;
printf("\n please input string:\n");
do{
scanf("%c",&prog[p++]);
}while(prog[p-1]!='#');
p=0;165