编译原理课程设计报告(共21页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《编译原理课程设计报告(共21页).doc》由会员分享,可在线阅读,更多相关《编译原理课程设计报告(共21页).doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上编译原理课程设计报告软件学院05级学号: 姓名:辛华时间:2007年7月25日一、词法分析1、实验目的编程实现词法分析程序,加深理解对词法分析原理。2、实验要求a、识别出特殊符号(用顿号隔开),如 = 、+ 、- 、* 、/ 、= 、= 、!= 、;、 :、 , 、 、 、 、 ( 、)等b、识别出关键字,如 if;then;while;do;end;for等c、识别其它标记 ID 和 NUM,并通过以下正规式定义其他标记: ID - letter ( letter | digit ) letter - a | b . | z | A |B . | Z NUM - d
2、igit digit* digit - 0 | 1 . | 93、算法思路:本程序每次判断均连续输入几个的词,不同的词之间用“空格”隔开,因为所输入的字符串中含有“空格”,故在输入的时候启用文本监视器,利用字符串解析器扫描所输入的字符串,以逗号,空格,分号分开,以java.util包中的 模式匹配生成文法和保留字对每个token进行分析,测试其匹配的模式,把它们区分开来4、程序流程图主程序流程图 开 始 置 初 值 子程序扫描 输出判断结果是否输入结束字 符? N Y 结 束 开 始 扫描程序流程图往下个字符扫描 是否空格? N是否是结束字 符? Y Y N是否关键字? Y N 是否数字? Y
3、 N是否运算符? Y N 无 法 识 别 输出判断结果 结 束5运行环境 JDK6.0实验二:LL1语法判断一、 实验目要求:自定义一个文法集,输入文法产生式,计算文法的FIRST,FOLLOW和SELECT集合,利用SELECT集合构造预测分析表,接着用预测分析程序,栈 和预测分析表对输入串进行分析,给出分析过程。二、设计思想: 设计算法实现: (1)求FIRST集(用关系图法) (a)每个文法符号对应图中一个结点。 (b)如果文法中有产生式AX,且 =* ,则从对应A的结点到对应X的结点连一条箭弧。 (c)凡是从FIRST(A)的结点有路径可到达的终结符结点所标记的终结符都为FIRST(A
4、的成员。 (d)判定是否为某非终结符FIRST集的成员,若是则将加入该非终结符的FIRST集中。(2)求FOLLOW集 对于G中的每一AVN,为构造FOLLOW(A),可反复使用如下的规则,直到每个FOLLOW集不再增大为止。(a) 对于文法的开始符号S,令#FOLLOW(S)。(b) 对于每一ABP,令FIRST()- = FOLLOW(B)。 (c) 对于每一ABP或ABP,且FIRST(),则令FOLLOW(A) FOLLOW(B)。(3)求SELECT集 若*,则SELECT(A)=FIRST()若=*,则SELECT(A)=(FIRST()-)FOLLOW(A)三、程序的详细分析过程
5、及相应说明预测分析程序工作过程: 上托栈顶符放入XNYYNNNNY Y把#和文法开始符压入分析栈; 当前输入符送a把产生式右部反序进栈XVT ?X=# ? X=a ?X=a?读下一输入符到aMX,a有产生式?出错结束出错预测分析程序工作过程Y四、程序结构 (一)程序中的主要变量和存储结构说明 (1)主要变量char nonterminaFZJ_NUM=E,D,T,S,F /* 文法的非终结符集*/;char terminaZJF_NUM=i,+,*,(,),#,$; /* 文法的终结符集*/;char vocabALL_NUM=E,D,T,S,F,i,+,*,(,),#,$ /* 文法的单词表
6、*/production *expression20; /* 存储产生式 */firfol fstfow10; /* 存储非终结符的FIRST集, FOLLOW集*/char nonrecycle;int recyclenum; /* 用来控制不出现重复计算同一个字符的FOLLOW集*/(2)存储结构/*-单链表-*/typedef struct firstnode char value; struct firstnode *next;firstset;/*-产生式,存有SELECT-*/typedef struct char source; char result10; firstset *
7、selects; production;/*-存放FIRST ,FOLLOW-*/typedef struct char value; firstset *firsts; firstset *follows; int success;firfol;/*-边表结点-*/ typedef struct node int adjvex; struct node * next; EdgeNode;/*-顶点表结点-*/ typedef struct vnode char vertex; EdgeNode * firstedge; VertexNode; typedef VertexNode AdjLi
8、st20;/*-邻接表-*/ typedef structAdjList adjlist; int n,e; ALGraph; ALGraph *T;/*- 栈-*/typedef struct Stack char stackMAX_STACK;int index; STACK,*pSTACK;(二)函数功能介绍ALGraph *CreateALGraph(ALGraph *G)建立有向图的邻接表存储DFSAL(ALGraph *G,int i)深度优先搜索 int search_position(char c,char a) 查找字符在数组的位置int isnontermina(char
9、x) 判断是否为非终结符int istermina(char x)判断是否为终结符int isunempty(char c) 判断是否能推出空insert_first(firstset *L,char c) 将某个字符插入到单链表中去int search_first(firstset *L,char c)判断某个字符是否在单链表中firstset *union_set(firstset *L,firstset *T) 合并两个单链表follow (char c)求Follow Setfirstset select() 求Select Setfirst(char c) 求First SetisL
10、L1() 判断某文法是否为LL1int isparalla(firstset *L,firstset *T) 判断两个单链表是否有交集void printstack(pSTACK stack)void initialization()void printtable()int isfull(pSTACK stack)void push(pSTACK stack, char s)void pop(pSTACK stack)void analyse()void searchtable_anddo(char Ac,char Ic) 打印预测分析过程的堆栈的知识实验3 算符优先1.实验目的:了解算符优先
11、分析法、算符优先文法、优先关系表构造、可归约串的刻画与寻找方法、算符优先分析算法等内容。能够采用一种编程语言(C语言)实现简单的表达式求值程序;能够使用自己编写的分析程序对简单的表达式进行分析并得出正确结果。2.实验内容:用高级编程语言编制表达式求值程序并进行相应的错误处理。3.实验要求:1. 对运算符的优先关系有明确的定义;2. 编写的分析程序能够正确识别源程序中的数据和操作符;3. 对于源程序中的词法错误,给出简单的错误提示,保证顺利完成整个表达式的分析;4. 实验报告要求做出详细说明,说明词法分析程序的工作过程,说明错误处理的实现。4.实验内容:本次程序选择8个显式操作符和一个隐式操作符
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 报告 21
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内