编译原理实验二

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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@。注意:提交邮件名字为:

班级-学号-姓名-实验二。

相关文档
最新文档