论文与—简单优先文法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
论文与—简单优先文法

简单优先文法分析设计 一、摘要 众所周知,翻译有两种方式:编译方式和解释方式,其中编译程序的主要功能是将源程序翻译成等价的目标程序,这个翻译过程一般可分为词法分析、语法分析、语义分析、中间代码生成、中间代码优化和目标代码生成等阶段来实现。 在众多阶段中,语法分析是相当重要的一部分,其任务是根据语言的语法规则把单词符号串分解成各类语法单位,如表达式、语句等。通过语法分析,可以确定整个输入符号串是否够成一个语法正确的程序。 在本文中,我们将重点探讨语法分析部分的简单优先分析法。简单优先分析法是一种典型的自下而上的分析方法。自下而上分析法是从输入符号串出发,试图归约到文法的识别符号,或从下往上地为输入串构造一棵语法树。对这个“可进行归约的符号串”,在不同的自下而上分析方法中有着不同的称呼,在简单优先分析法中称之为“句柄”,而在算符优先分析方法中称之为“素短语”。 关于简单优先文法分析器,主要分为三大部分:数据结构及界面的设置、优先关系矩阵的求解、符号串的分析。文法分析器使用VS2008编译器编译,主要是使用其强大的界面设计功能。由于水平有限,本文或许有不妥之处,敬请读者不吝指教。 二、基本概念 简单优先分析法对使用它的文法是有限制的,只有简单优先文法才能使用简单优先分析法。在介绍简单优先文法之前,我们先来看一下三种简单优先关系。 ①L±R,当且仅当文法中有以下形式的产生式:U::=αLRβ。其中,L,R∈(VN∪VT); α,β∈(VN∪VT)*。 ②LR,当且仅当文法中有以下形式的产生式:U::=αLPβ且P Rγ。其中,L,R∈ (VN∪VT);P∈VN;α,β,γ ∈(VN∪VT)*。 ③LR,当且仅当文法中有以下形式的产生式:U::=αWPβ且WδL,PRγ。其 中,L,R∈(VN∪VT);W∈VN;P∈(VN∪VT);α,β,δ,γ∈(VN∪VT)*。 有了上面三种优先关系的说明,我们再来看一下简单优先文法的定义。满足以下条件的文法称为简单优先文法: ①字母表中的任意两个符号之间之多存在一种简单优先关系; ②文法的任意两条产生式都没有相同的右部。 如文法G[S]: S::=(R)|a,R::=T ,T::=S,T|S 是一种简单优先文法。 下面我们再来看一下移进及规约。 移进过程:将输入符号串从左到右逐个移进符号栈。 规约过程:栈顶符号串与某一产生式右部相匹配成为可规约符号串时,将此符号串规约为一个非终结符,这个非终结符是该产生式左部符号。 在简单优先分析法中,我们用三种优先关系来判断符号栈面临当前符号的操作时移进还是规约,若为前两种则为移进,第三种则为规约。而在规约过程中,我们用句柄来搜索用来规约的文法。 一个句型中的最左直接短语,称为该句型的句柄。一个句型的直接短语和句柄可以用其语法树的子树描述。语法树的一棵简单子树(只有单层的子树)的叶子结点组成的符号串是这个句型关于简单子树根结点的一个直接短语。语法树最左边的简单子树的叶子结点组成的符号串就是这个句型的句柄。例如:对于上面提到的文法G[S],子串(R) 即为符号串((R),a)的句柄。 三、程序运行效果 为了方便理解后文的编程思路,我们先来看一下程序要达到的效果,如图1。 图1 合法语句运行结果 看了上面的程序运行结果,相信您已经对简单优先分析法有了一定的了解,下面就让我们来具体看一下简单优先文法分析器的设计思路吧。 设计思路 (1)文法结构的定义 public struct MyData //文法结构定义(为方便分析将文法分为两部分) { public string s1, s2; //s1为文法的非终结符部分(等号前),s2为后半部分 public int s2_length; //s2的长度(方便使用) } public int N = 50; //最多能输入的文法条数 public MyData[] gam = new MyData[N]; //将所有文法都保存在数组中 public int num = 0; //记录输入的文法条数 (2)优先关系矩阵的求法 分析优先关系的定义,不难得到以下结果: 由①知:两个连在一起的字符关系为“±”; 由②知:两个连在一起的字符,若后者P为非终结符,则前者LP的推导的首字符; 由③知:两个连在一起

文档评论(0)

liangyuehong + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档