77范文网 - 专业文章范例文档资料分享平台

华科编译原理实验报告(3)

来源:网络收集 时间:2020-07-28 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

(3)输入字符串if x>2; y=3; end #其结果如下图所示:

实验二 语法分析程序实现

一、实验目的与要求

通过设计、编制、调试一个典型的语法分析程序(任选有代表性的语法分析方法,如算符优先法、递归下降法、LL(1)、SLR(1)、LR(1)等,作为编制语法分析程序的依据),对扫描器所提供的单词序列进行语法检查和结构分析,实现并进一步掌握常用的语法分析方法。

二、实验内容

选择对各种常见高级程序设计语言都较为通用的语法结构作为分析对象,给出其文法描述(注意应与所采用的语法分析方法比较贴近),设计并实现一个完整的语法分析程序。

输入:源程序以文件的形式输入。

输出:对于所输入的源程序,如果输入符号串是给定文法定义的合法句子,则输出“RIGHT”,并且给出每一步归约的过程;如果不是句子,即输入串有错误,则输出“ERROR”,并且显示已经归约出的各个文法符号。

三、基本实验题目

以如下文法G1所定义的算术表达式的赋值语句作为分析对象,编写并调试一个语法分析程序。

G1[<赋值语句>]:

<赋值语句> → <变量>:=<算术表达式>

<算术表达式> → <项> | <算术表达式>+<项> | <算术表达式>-<项> <项> → <因式> | <项>*<因式> | <项>/<因式> <因式> → <变量> | <常数> | (<算术表达式>) <变量> → <标识符>

<标识符> → <标识符> <字母> | <标识符> <数字> | <字母> <常数> → <整数> | <浮点数> <整数> → <数字> | <数字> <整数> <浮点数> → ? <整数> | <整数> ? <整数> <字母> → A|B|C|…|X|Y|Z|a|b|c|…|x|y|z <数字> → 0|1|2|…9

四、源程序

#include using namespace std; #include #include

#define MAX 150 //词法分析表的最大容量

#define MAXBUF 255 //缓冲区的最大缓冲量 void term(); void lrparser(); void statement(); void yucu(); void expression(); void factor();

char prog[MAXBUF],token[MAX];

char ch;

int syn,p,m,n,sum,kk;

char * rwtab[6]={\,\,\,\,\,\}; ////////////////////////////////////////////////////////// /*词法扫描程序:*/ void scaner() {

for(m=0;m

while(ch==' ')ch=prog[p++];

if((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')) {

while((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')||(ch<='9'&&ch>='0')) {

token[m++]=ch;

ch=prog[p++]; //读取下一个字符 }

token[m++]='\\0'; ch=prog[--p]; syn=10;

for(n=0;n<6;n++)

if(strcmp(token,rwtab[n])==0) {

syn=n+1; //给出syn值 break; } } else

if((ch<='9'&&ch>='0')) { sum=0;

while((ch<='9'&&ch>='0'))

{

sum=sum*10+ch-'0'; ch=prog[p++]; }

ch=prog[--p]; syn=11; }

else switch(ch) {

case '<':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='>') { syn=21; token[m++]=ch; } else

if(ch=='=') { syn=22; token[m++]=ch; } else { syn=20; ch=prog[--p]; } break;

case '>':token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=24; token[m++]=ch; } else { syn=23; ch=prog[--p];

} break;

case ':':token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=18; token[m++]=ch;

} else

{

syn=17; ch=prog[--p]; } break;

case '+':syn=13;token[0]=ch;break; case '-':syn=14;token[0]=ch;break; case '*':syn=15;token[0]=ch;break; case '/':syn=16;token[0]=ch;break; case ':=':syn=18;token[0]=ch;break; case '<>':syn=21;token[0]=ch;break; case '<=':syn=22;token[0]=ch;break; case '>=':syn=24;token[0]=ch;break; case '=':syn=25;token[0]=ch;break; case ';':syn=26;token[0]=ch;break; case '(':syn=27;token[0]=ch;break; case ')':syn=28;token[0]=ch;break; case '#':syn=0;token[0]=ch;break; default:syn=-1;

break;

} }

/////////////////////////////////////////////////////// void statement() {

if (syn==10) {

scaner(); //读下一个单词符号 if (syn==18) {

scaner(); //读下一个单词符号

expression(); //调用expression函数 } else {

printf(\); kk=1; } } else

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库华科编译原理实验报告(3)在线全文阅读。

华科编译原理实验报告(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/1137073.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: