编译原理实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理实验二语法分析
一实验目的
编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。
二实验要求
(1) 利用C语言编写递归下降分析程序,对赋值语句进行语法分析。
语法规则为:
(1)<程序>::=begin <语句串> end--------------------------------------lrparser()
(2)<语句串>::=<语句>{;<语句>}-------------------------------------yucu()
(3)<语句>::=<赋值语句>-----------------------------------------------无
(4)<赋值语句>::=ID:=[=]<表达式>-----------------------------------statement()
(5)<表达式>::=<项>{+<项>|-<项>}-----------------------------------expression()
(6)<项>::=<因子>{*<因子>|/<因子>}---------------------------------term()
(7)<因子>::=ID|NUM|(<表达式>)--------------------------------------factor()
(2)语法分析程序的功能。
输入:输入文法正确的句子。
输出:如果文法正确,输出“success”,否则输入“error”。
输入begin a:=9; x:=2*3; b:=a+x end#
输出success
输入x:=a+b*c end#
输出error in ‘begin’
(3)主程序以及各子程序流程图,请见课本P200所示。
三程序编写思路。
①VC++6.0环境下编写C代码的方法:
1.“文件”-“新建”-打开“文件”选项卡-选择C/C++ Source File选项,输入自定义的文件名,也可选择存放文件的位置。
2.“文件”-“新建”-在“工程”选项卡-选择Win32 Console Application,输入自定义的工程名,可选择工程文件的存放位置-选择建一个空工程-完成确定之后,进入工程-点选-“文件”-新建C/C++ Source File-输入自定义的文件名即可。
②按照课本P201的C语言程序框架,将中文描述部分,改写成C语言程序代码。
可参考主程序代码:
#include
#include
char prog[100],token[8];
char ch;
int syn,p,m,n,sum;
int kk;
char *rwtab[6]={"begin","if","then","while","do","end"};
void scaner();
void lrparser();
void yucu();
void statement();
void expression();
void term();
void factor();
void main()
{
p=kk=0;
printf("\nplease input a string(end with #)\n");
do
{
ch=getchar();
prog[p++]=ch;
}while(ch!='#');
p=0;
scaner();
lrparser();
}//main
思考:变量kk的功能。
四上交。
1. 程序源代码。可通过网络直接提交,或传至邮箱:sias_exp_wll@。注意:提交邮件名字为:
班级-学号-姓名-实验二。