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

编译原理语法分析

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

上机练习二:语法分析

一、根据上机练习一给出的PL/0语言扩充的巴克斯范式语法描述,利用递归下降的语法分析方法,编写PL/0语言的语法分析程序。 要求:

1. 对给出的PL/0语言进行分析,证明其可以进行自上而下的语法分析;

2. 对block、proc、statement、condition、expression、term、factor进行分析,画出语法

分析图,在此基础上描述这些子程序的设计思想; 3. 具有一定的语法错误处理能力;

二、源代码

#include #include #include #include #include using namespace std; struct yufa {

string SYM; //单词的类别 string strToken; //用户所定义的标识符的值 int l; //记录换行符的个数,即记录源文件的行数

}yufa0, yufa1, yufa2[1000];//yufa1用于保存各个单词,yufa1用于词法分析过程;yufa0主要用于语法分析; char ch;

int mm= 0; //结构体数组下标 int line = 0;//出错位置 //char ch = ' ';

string key[15] = { \\预设保留字

void prog(); void block(); void condecl(); void _const(); void vardecl(); void proc(); void body();

void statement(); void lexp();

void exp(); void term(); void factor();

void error0() { cout <<\标示符出错\ exit(0); //出错即退出 }

void error1() { cout <<\第\行缺少分号\ }

void error2() {

cout <<\第\行标识符(变量名)出错\}

void error3() {

cout <<\第\常量未声明(缺少const)\}

void error4() {

cout <<\第\常量未赋值\}

void error5() { cout <<\第\赋值号出错或者缺少赋值号\}

void error6() { cout <<\第\变量未声明(缺少var)\ }

void error7() { cout <<\第\行缺少右括号\}

void error8() { cout <<\第\行缺少左括号\}

void error9()

{

cout <<\第\行缺少参数\}

void error10() {

cout <<\第\行procedure错误\}

void error11() {

cout <<\第\行缺少end(begin与end不匹配)\}

void error12() {

cout <<\第\行缺少then(if与then不匹配)\}

void error13() {

cout <<\第\行缺少do(while与do不匹配)\}

void error14() { cout <<\第\行调用过程缺少标识符\}

void error15() {

cout <<\第\行缺少分号\}

void error16() { cout <<\第\行条件语句出错(缺少界符)\}

void prog()//程序的递归子程序实现 { line++; if (yufa0.SYM == \ { mm++; yufa0.SYM = yufa2[mm].SYM; if (yufa0.SYM == \ // ,即标识符 { mm++; yufa0.SYM = yufa2[mm].SYM; if (yufa0.SYM == \ { mm++; yufa0.SYM = yufa2[mm].SYM; block();

}

}

else error1();//缺少; } else error2();//缺少标识符或者标识符错误 }

else error0();

cout <<\语法分析结束------------------------\\n\\n\

void block()//程序体的递归子程序实现, → [][][] { if (yufa0.SYM == \ condecl(); if (yufa0.SYM == \ vardecl(); if (yufa0.SYM == \ proc(); body(); }

void condecl()//常量说明的递归子程序实现, → const {,}; { line++; if (yufa0.SYM == \ { mm++; yufa0.SYM = yufa2[mm].SYM; _const();// while (yufa0.SYM == \逗号 { mm++; yufa0.SYM = yufa2[mm].SYM; _const(); }// if (yufa0.SYM == \ { mm++; yufa0.SYM = yufa2[mm].SYM; } else error1();//缺少; } else error3();//缺少常量定义const }

void _const()//常量,:= { if (yufa0.SYM == \ {

}

mm++; yufa0.SYM = yufa2[mm].SYM; if (yufa0.SYM == \{ mm++; yufa0.SYM = yufa2[mm].SYM; if (yufa0.SYM == \ { mm++; yufa0.SYM = yufa2[mm].SYM; } }

else error4();//常量未赋值

else error5();//缺少赋值号,或者赋值号错误

else error2(); //缺少标识符 }

void vardecl()//变量说明的递归子程序实现, → var {,}; { line++; if (yufa0.SYM == \ { mm++; yufa0.SYM = yufa2[mm].SYM; if (yufa0.SYM == \ { mm++; yufa0.SYM = yufa2[mm].SYM; while (yufa0.SYM == \ { mm++; yufa0.SYM = yufa2[mm].SYM;//下一单词 if (yufa0.SYM == \ { mm++; yufa0.SYM = yufa2[mm].SYM; } else error2();//缺少标识符即缺少变量 } if (yufa0.SYM == \ { mm++; yufa0.SYM = yufa2[mm].SYM; }//下一单词 else error2(); } } else error6();//变量未声明 }

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库编译原理语法分析在线全文阅读。

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