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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

LL1文法语法分析编译原理课程设计Word文档格式.docx

1、2.2程序流程图3系统实现3.1上机编程(出于篇幅考虑,此处仅列出核心语法分析代码)#include stdlib.hstring.h#define maxlen 13#define idle 5 /用来代表的字符 /*产生式*struct Fl_Node;typedef struct Fl_Node *Fl_PNode;struct Fl_Node/存储FIRST集与FoLLOW集的终结符 char info; Fl_PNode link;struct Jo_F_Node;typedef struct Jo_F_Node *Jo_F_PNode;struct Jo_F_Node/存储FIRS

2、T集与FoLLOW集的结点(非终结符) Jo_F_PNode link; char F; Fl_PNode next;struct LinkF_F/存储FIRST集与FoLLOW集的头 Jo_F_PNode knot;typedef struct LinkF_F *PLinkF_F;struct Pr_Node;typedef struct Pr_Node *Pr_PNode;struct Pr_Node/存储产生式 char head; /超能力存储这是个大问题,用到静态存储时,一定要给它分配足够的空间 char infomaxlen+1;/为什么在这里我只定义了9个,在底下它却具有存储11

3、个的能力 Fl_PNode fl; Pr_PNode link;struct Jo_P_Node;typedef struct Jo_P_Node *Jo_P_PNode;struct Jo_P_Node/存储产生式的结点 Jo_P_PNode link; short num; Pr_PNode next;struct LinkLead/产生式结点的头部 Jo_P_PNode knot;typedef struct LinkLead *PLinkLead;/*/*队列*struct Q_Node;typedef struct Q_Node *Q_PNode;struct Q_Node Q_PN

4、ode link;struct LinkQueue Q_PNode f; Q_PNode r;typedef struct LinkQueue *PLinkQueue;/*堆栈*struct S_Node;typedef struct S_Node *S_PNode;struct S_Node S_PNode link;struct LinkStack S_PNode top;typedef struct LinkStack *PLinkStack;/*表格*struct T_Node;typedef struct T_Node *T_PNode;struct T_Node char row;

5、 char column; char infomaxlen; T_PNode down; T_PNode right;struct LinkTable T_PNode tab;typedef struct LinkTable *PLinkTable;bool judgeQueue_link(PLinkQueue plqu,char x)/判断字符x有无在队列plqu中 Q_PNode p; p = plqu-f; while(p) if(p-info = x) return true; p = p-link; return false;void push_link(PLinkStack pls

6、tack,char x)/进栈 S_PNode p; p = (S_PNode)malloc(sizeof(struct S_Node); if(p = NULL) printf(空间申请失败!n); else p-info = x;link = plstack-top; plstack-top = p;void push_str_link(PLinkStack plstack,char x)/将分析串x存入plstack堆栈中,要求从字符串的尾部开始进栈 short i = 0; while(xi != 0) i+; while(-i) = 0)info = xi;void print_re

7、sult(PLinkTable pltable,PLinkStack plst1,PLinkStack plst2) short i=1,k,j; char smaxlen;/ S_PNode p1,p2; void pop_link(PLinkStack plstack); char top_link(PLinkStack plstack); void printStackStr(short m,short n); void printConStack_link(PLinkStack plstack); void push_str_link(PLinkStack plstack,char x

8、);步骤 分析栈 / p2 = plst2- k = 0; while(p2) k+; p2 = p2- if(k10) printStackStr(10,k);剩余输入串 推导所用产生式或匹配n /C语言里允许使用函数名相同,但参数不同的两函数同时存在 while(plst1-top-link | top_link(plst1) !# if(i j = 0; while(p1) j+; p1 = p1- printStackStr(j,12); printStackStr(j,k); printStackStr(j,10); /插入若干空格(取个) printStack_link(plst2

9、); if(top_link(plst1) = top_link(plst2)“%c”匹配,top_link(plst1); pop_link(plst1); pop_link(plst2); strcpy(s,findTable_link(pltable,top_link(plst1),top_link(plst2); if(s0 = nn有错n剩余输入串“”用此产生式组无法推出nn return; else if(!strcmp(s,)/注意在这边不能用s0 = 来作为判断条件%c%c%c%c%c,top_link(plst1),161,250,166,197); /: :166,197%

10、c%s,top_link(plst1),s); push_str_link(plst1,s); if(top_link(plst1) = # printStackStr(1,k);# 接受nnnn在推导过程中出现问题nnvoid main() while(true) scanf(%s,s_t); getchar(); t = 0; while(s_tt ! /判断数组s_t里有无非法字符 if(!judgeQueue_link(plqu2,s_tt)对不起,你所输入的符号串中不能由之前的文件里的文法得出n break; t+; if(t != 0 & s_tt = nn请另输入一个待分析的字符

11、串: if(s_tt-1 ! 你输入的分析字符串没有以“#”作为结束标志;n系统自动在分析字符串后加上“#”nn push_link(plstack2, /将分析串存入plstack2堆栈中 push_str_link(plstack2,s_t); print_result(pltable,plstack1,plstack2);3.2运行结果该程序是在VC+ 6.0以下编写的,里面没有用到C+的知识,纯C编写的代码.在运行之前,先将要分析的文法写入一个文本文档*.txt里,如:SAABDDiBDDBCEE+CEEC)A*C(注意:只有这里用到两个符号与,其中在特殊符号里、在希腊字母里,此处将上

12、面这样的产生式组存放在eq.txt这个文本文档里作为示例。下面显示语法分析进行个步骤。开始运行后,根据提示输入文件名“eq.txt”后按Enter键继续,显示如下:按任意键继续,显示如下:按提示,输入待分析的句子,按Enter键继续,显示如下:按提示,输入y,分析下一条句子;或者输入n,结束,分别显示如下:4总结与感想因为要考试的原因,所有想尽快把这个课程设计做完,可是越急越容易出错,做起来很不顺手,特别是编程的时候,虽然借鉴了几篇类似的试验或课程设计,但完成这一设计仍不是一件简单的事情。在设计过程中主要遇到以下两个问题:1数据结构问题。在此程序中,用到队列,堆栈等形式的数据结构,各节点链接复

13、杂,遇到不少问题。在细心分析并逐步改正下,解决了此问题。2、符号问题。一开始在visual studio2005中没有找到这两个符号,苦恼半天。后来想个办法在Microsoft Word中,找到此符号后,直接粘贴到程序代码中。但在粘贴之后,还出了问题。在网上搜索发现,原来它们并不像其它26个英文字母一样,各自对应一个字符ASCII码值,而是由多个连续字节表示,如:。总的来说,此次编译原理课程设计加深了我对编译这门课的理解,发现自己还有很多的地方要复习,甚至还有知识点的理解偏差。这些将直接影响期末考试,我将在以后的时间里,努力完善这些不足。参考文献1 胡伦骏,徐兰芳等.编译原理M.第2版.北京:

14、电子工业出版社,50052 王雷,刘志成等.编译原理课程设计M.北京:电子工业出版社,20023 何炎祥.编译程序构造M.武汉:武汉大学出版社,19884 金成植.编译原理与实现M.北京:高等教育出版社,19895 Holub A.Compiler Design in CM.Prentice-Hall,1990湖北大学本科课程设计成绩评定表项目权重分值具体要求得分文献阅读与调查论证0.20100能独立查阅文献和从事其它调研;有收集、加工各种信息的能力论文撰写质量0.40设计合理、理论分析与计算正确,实验数据准确可靠;有较强的实际动手能力、经济分析能力和计算机应用能力;设计说明书完全符合规范化要求,用A4复印纸打印成文学习态度0.30学习态度认真,科学作风严谨,严格按要求开展各项工作,按期完成任务学术水平与创新0.10设计有创意,有一定的学术水平或实用价值总分评语:等级: 指导教师: 年 月 日

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2