ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:51.75KB ,
资源ID:7672537      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7672537.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(语法分析程序报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

语法分析程序报告.docx

1、语法分析程序报告基本语法分析程序报告 姓名:牛添识 班级:软件94 学号:091610721. 程序设计语言文法的形式化描述pascal语言子集文法-:=-if then | if then else -| -| -|true|false2. 单词种别定义(1) 保留字Program(1),begin(2),end(3),var(4),interger(5),if(6),then(7)else(8),do(9),while(10) (2) 标识符(11)(3) 整形常数(12)(4) 界符,运算符 +(13) -(14) ,( (15), )(16),=(17),(18),(19) ;(20)

2、(分号,语句结束时使用),(21)(定义变量时分隔多个变量) :(22)(冒号,定义变量时使用) :=(23)(冒号+等号,赋值号) *(24)乘 , /(25)除3. 语法分析程序 #include#include fstream.h#includeclass Queue private: char ptr128; int head; int tail; public: void copy(Queue *queue) queue-head=head; queue-tail=tail; for(int i=head;iptri=ptri; bool Find(int t) for(int i=

3、head;i0) return false; return true; ;class Pro_Processprivate: int sta_stack;public : Pro_Process() sta_stack=0; public: void Process(char * ptr) char * temp2=ptr; while(int)* temp2!=0)/去掉/和/* if(sta_stack!=0)/进入夹逼注释阶段 /寻找下一个标记符号 if(int)*temp2=*&(int)*(temp2+1)=/)/寻找到 sta_stack-; *temp2=32; *(temp2+

4、1)=32; if(int)*temp2=/&(int)*(temp2+1)=*) sta_stack+; *temp2=32; *(temp2+1)=32; else/否则在注释中置为空格 *temp2=32; else/正常进行阶段 if(int)*temp2=/) if(int)*(temp2+1)=/) Pro_process1(temp2); return ; if(int)*(temp2+1)=*) *temp2=32; sta_stack+; temp2+; private: /* 将当前符号置为0 * */ void Pro_process1(char * temp2) *te

5、mp2=0; ;class Two_pass private: char ptr20; int index; int state;/确定返回的是否带有字符串,如果有为1;没有为0; public : bool equal(char * p) int temp=strcmp(ptr,p); if(temp=0)/strcmp字符串匹配成功为0 return true; return false; bool equal(int para) if(para=index) return true; return false; public : Two_pass() index=0; void Two_

6、copy(char * p,int dex) state=1; int count=0; while(*p!=0) ptrcount=*p; count+; p+; ptrcount=0; index=dex; void Two_copy(int dex)/ 返回值没有字符串 index=dex; state=0; if(1=index) strcpy(ptr,program); if(2=index) strcpy(ptr,begin); if(3=index) strcpy(ptr,end); if(4=index) strcpy(ptr,var); if(5=index) strcpy(

7、ptr,integer); if(6=index) strcpy(ptr,if); if(7=index) strcpy(ptr,then); if(8=index) strcpy(ptr,else); if(9=index) strcpy(ptr,do); if(10=index) strcpy(ptr,while); if(13=index) strcpy(ptr,+); if(14=index) strcpy(ptr,-); if(15=index) strcpy(ptr,(); if(16=index) strcpy(ptr,); if(17=index) strcpy(ptr,=);

8、 if(18=index) strcpy(ptr,); if(19=index) strcpy(ptr,=a&ch=A&ch=0&chTwo_copy(strToken,11); return true; else pass-Two_copy(code); return true; else if(isDigit() while(isDigit() Concat(); Getchar(); Append(); pass-Two_copy(strToken,12); return true; else if(ch=+) pass-Two_copy(13); Getchar(); return t

9、rue; if(ch=-) pass-Two_copy(14); Getchar(); return true; if(ch=() pass-Two_copy(15); Getchar(); return true; if(ch=*) pass-Two_copy(24); Getchar(); return true; if(ch=/) pass-Two_copy(25); Getchar(); return true; if(ch=) pass-Two_copy(16); Getchar(); return true; if(ch=) pass-Two_copy(17); Getchar()

10、; return true; if(ch=) pass-Two_copy(18); Getchar(); return true; if(ch=Two_copy(19); Getchar(); return true; if(ch=;) pass-Two_copy(20); Getchar(); return true; if(ch=,) pass-Two_copy(21); Getchar(); return true; if(ch=:) Getchar(); if(ch=) pass-Two_copy(23); Getchar(); return true; else pass-Two_c

11、opy(22); return true; / return false; ;class AnalyseMachineprivate: Two_pass SYM; AccidenceAnalyse sss; bool sysmbol;private: Queue Errorqueue;/错误队列 Queue Rightqueue;/正确队列public: AnalyseMachine() sysmbol=true; public : bool getCorretMess() return sysmbol; private: bool ADVANCE() return sss.Process(&

12、SYM); public: void test() int i=0; while (ADVANCE() i+; private: bool getNextLine()/取到本行分号;返回true,如果文件尾返回false if(SYM.equal(20) return true; else while(sss.Process(&SYM) if(SYM.equal(20) return true; return false;/文件尾 public: bool Z()/如果有句子,继续分析,返回true,否则为文件尾,返回false sysmbol=true; Errorqueue.clear()

13、;/错误消息队列清空 Rightqueue.clear();/正确队列清空 if(false=ADVANCE() return false; if(SYM.equal(6)/if 语句 Rightqueue.pushQueue(10); A(); getNextLine(); else if(SYM.equal(11)/赋值语句 I(); getNextLine(); else if(SYM.equal(10)/循环语句 Rightqueue.pushQueue(2); L(); getNextLine(); else ERROR(); if(sysmbol=false) coutfalse; else couttrue; return true; private:/赋值语句 void I() Rightqueue.pushQueue(3); if(SYM.equal(11)/标识符 J(); if(SYM.equal(23)/赋值号 ADVANCE(); else ERROR(); return ; D();/ /* if(SYM.equal(20) else ERROR(); */

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1