论文—简单优先文法

论文—简单优先文法

ID:9397234

大小:247.50 KB

页数:7页

时间:2018-04-30

论文—简单优先文法_第1页
论文—简单优先文法_第2页
论文—简单优先文法_第3页
论文—简单优先文法_第4页
论文—简单优先文法_第5页
资源描述:

《论文—简单优先文法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、简单优先文法分析设计一、摘要众所周知,翻译有两种方式:编译方式和解释方式,其中编译程序的主要功能是将源程序翻译成等价的目标程序,这个翻译过程一般可分为词法分析、语法分析、语义分析、中间代码生成、中间代码优化和目标代码生成等阶段来实现。在众多阶段中,语法分析是相当重要的一部分,其任务是根据语言的语法规则把单词符号串分解成各类语法单位,如表达式、语句等。通过语法分析,可以确定整个输入符号串是否够成一个语法正确的程序。在本文中,我们将重点探讨语法分析部分的简单优先分析法。简单优先分析法是一种典型的自下而上的分析方法。自下而上分析法是从输入符号串出发,试图归约到文法的识别符号,或从下往上地为输入

2、串构造一棵语法树。对这个“可进行归约的符号串”,在不同的自下而上分析方法中有着不同的称呼,在简单优先分析法中称之为“句柄”,而在算符优先分析方法中称之为“素短语”。关于简单优先文法分析器,主要分为三大部分:数据结构及界面的设置、优先关系矩阵的求解、符号串的分析。文法分析器使用VS2008编译器编译,主要是使用其强大的界面设计功能。由于水平有限,本文或许有不妥之处,敬请读者不吝指教。二、基本概念简单优先分析法对使用它的文法是有限制的,只有简单优先文法才能使用简单优先分析法。在介绍简单优先文法之前,我们先来看一下三种简单优先关系。①L±R,当且仅当文法中有以下形式的产生式:U::=αLRβ。

3、其中,L,R∈(VN∪VT);α,β∈(VN∪VT)*。②LR,当且仅当文法中有以下形式的产生式:U::=αWPβ且WδL,PRγ。其中,L,R∈(VN∪VT);W∈VN;P∈(VN∪VT);α,β,δ,γ∈(VN∪VT)*。有了上面三种优先关系的说明,我们再来看一下简单优先文法的定义。满足以下条件的文法称为简单优先文法:①字母表中的任意两个符号之间之多存在一种简单优先关系;②文法的任意两条产生式都没有相同的右部。如文法G[S]:S::=(R)

4、a

5、,R::=T,T::=S,T

6、S是一种简单优先文法。下面我们再来看一下移进及规约。移进过程:将输入符号串从左到右逐个移进符号栈。规约过程:栈顶符号串与某一产生式右部相匹配成为可规约符号串时,将此符号串规约为一个非终结符,这个非终结符是该产生式左部符号。在简单优先分析法中,我们用三种优先关系来判断符号栈面临当前符号的操作时移进还是规约,若为前两种则为移进,第三种则为规约。而在规约过程中,我们用句柄来搜索用来规约的文法。一个句型中的最左直接短语,称为该句型的句柄。一个句型的直接短语和句柄可以用其语法树的子树描述。语法树的一棵简单子树(只有单层的子树)的叶子结点组成的符号串是这个句型关于简单子

7、树根结点的一个直接短语。语法树最左边的简单子树的叶子结点组成的符号串就是这个句型的句柄。例如:对于上面提到的文法G[S],子串(R)即为符号串((R),a)的句柄。三、程序运行效果为了方便理解后文的编程思路,我们先来看一下程序要达到的效果,如图1。图1合法语句运行结果看了上面的程序运行结果,相信您已经对简单优先分析法有了一定的了解,下面就让我们来具体看一下简单优先文法分析器的设计思路吧。四、设计思路(1)文法结构的定义publicstructMyData//文法结构定义(为方便分析将文法分为两部分){publicstrings1,s2;//s1为文法的非终结符部分(等号前),s2为后半部

8、分publicints2_length;//s2的长度(方便使用)}publicintN=50;//最多能输入的文法条数publicMyData[]gam=newMyData[N];//将所有文法都保存在数组中publicintnum=0;//记录输入的文法条数(2)优先关系矩阵的求法分析优先关系的定义,不难得到以下结果:由①知:两个连在一起的字符关系为“±”;由②知:两个连在一起的字符,若后者P为非终结符,则前者L后者P及其推导的首字符(有推导时)。根据以上理解,不难看出第一种关系求解过程相对简单,后

9、两种则相对复杂。为求解后两种关系,我们先来求解非终结符的推导的首、尾字符。这里我使用递归的方法求推导,并将要求解的字符保存在字符串中,下面是求解算法。////////此函数寻找ch的部分推导(可能有多个推导,但我们只需其中一部分)的第一个字符privatestringSearchDerivation(charch,intdepth){stringstr="";if(depth<1)returnstr;for(inti=0;i

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

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

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