编译原理 语法分析器

编译原理 语法分析器

ID:2154685

大小:78.94 KB

页数:20页

时间:2017-11-14

编译原理 语法分析器_第1页
编译原理 语法分析器_第2页
编译原理 语法分析器_第3页
编译原理 语法分析器_第4页
编译原理 语法分析器_第5页
资源描述:

《编译原理 语法分析器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理第二次实验报告——语法分析器的设计一.实验目的:熟悉并设计一个表达式的语法分析器二.相关知识:1、形式语言基础及其文法运算2、语法分析原理及4种常用的语法分析方法其中:四种算法为(1)设计算术表达式的递归下降子程序分析算法(2)设计算术表达式的LL(1)分析算法(3)设计算术表达式的简单优先分析算法(4)设计算术表达式的SLR(1)分析算法三.实验内容:1.设计表达式的语法语法分析器算法2.编写代码并上机调试运行通过要求:输入------------表达式输出------------表达式语法是否正确四.实验要求:1、给出算术表达式文

2、法2、进行适当的文法变换3、选择一种语法分析的方法,并说明其原理4、根据原理给出相应的算法设计,说明主要的数据结构并画出算法流程图5、编写代码并上机调试运行通过6、写出程序运行结果7、写出相应的文档以及代码注释五.思考题:语法分析的任务是什么?答:语法分析是编译过程的核心部分。它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。语法分析器在编译程序中的地位如图所示。源程序单词符号语法分析树编译程序后续部分语法分析器词法分析器取下一单词符号符号表我们知道语言的语法结构是用上下文无关文法描述的。因此,语法分析器

3、的主要工作本质上就是按文法的产生式,识别输入符号串是否为一个句子。这里所说的输入串是指由单词符号(文法的终结符)组成的有限序列。对一个文法,当给你一串(终结)符号时,怎样知道它是不是该文法的一个句子呢?这就是要判断,看是否能从文法的开始符号出发推导出这个输入串。或者,从概念上讲,就是要建立一棵与输入串相匹配的语法分析树。按照语法分析树的建立方法,我们可以粗略的把语法分析办法分成两类,一类是自上而下的分析法,另一类是自下而上的分析法。(1)设计算术表达式的简单优先分析算法1实验题目:算符优先语法分析器2实验目的:熟悉并实现一个简单的扫描器3实验

4、内容:1.设计算符优先语法分析器算法;2.编写代码并上机调试运行通过。·要求:输入——表达式;输出——表达式语法是否正确。4概要设计:要采用算符优先语法分析器分析出来的语法必须满足以下条件。首先,要判断是否是算符文法,若产生式中含有两个相继的非终结符则不是算符文法;当满足这一条件后还要接着判断文法G是否为算符优先文法:若不是算符文法或若文法中含空字或终结符的优先级不唯一则不是算符优先文法;当满足以上两个条件后才可以使用算符优先语法分析器来分析这个文法。(1)语法分析器设计1.算术表达式文法G(E):EàEω0T

5、TTàTω1F

6、FFài

7、(E

8、)2.算符优先分析表+*i()#+>3<2<2<2>3>3*>3>3<2<2>3>3i>3>300>3>3(<2<2<2<2=10)>3>300>3>3#<2<2<2<20OK其中0表示其优先级不能进行比较,1表示优先级相等,2表示其优先级为小于,3表示其优先级为大于。voidcreateYXB(intn)为构造优先表的函数。(2)判断此文法是否是符合算符优先语法分析器可以进行分析的文法,根据以上说明的两个条件写出程序段intjudge1(intn)是判断是否是算符文法:若产生式中含有两个相继的非终结符则不是算符文法voidjudge2(in

9、tn)是判断文法G是否为算符优先文法:若不是算符文法或若文法中含空字或终结符的优先级不唯一则不是算符优先文法(3)voidsearch(charLodew)将在F数组中寻找到的终结符与非终结符对的标志位值为1(4)voidFirstVT(intn)和voidLastVT(intn)辅助填表(5)intjudge3(chars,chara)是用来返回在归约过程中两个非终结符相比较的值5源程序代码:#include#include#includetypedefstruct{charR;

10、charr;intflag;}array;typedefstruct{charE;chare;}charLode;typedefstruct{charLode*base;inttop;}charstack;charstr[80][80],arr[80][80],brr[80][80];arrayF[20];intm,kk,p,ppp,FF=1;charr[10];intcrr[20][20],FLAG=0;charccrr1[1][20],ccrr2[20][1];voidInitstack(charstack&s)//定义栈{s.base=

11、newcharLode[20];s.top=-1;}voidpush(charstack&s,charLodew){s.top++;s.base[s.top].E=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。