数据库原理与OracleSQL语言.ppt_第1页
数据库原理与OracleSQL语言.ppt_第2页
数据库原理与OracleSQL语言.ppt_第3页
数据库原理与OracleSQL语言.ppt_第4页
数据库原理与OracleSQL语言.ppt_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四部分解析,教学:胡静,解析器的作用,以解析器为核心的编译模型,解析器的作用,接收词法分析器提供的标记串,检查标记串是否可以由源语言的语法生成,以易于理解的方式提示语法错误信息,并从常见错误中恢复,解析器的位置,解析的例子,解析的类比,自然语言的解析:识别一个句子是否符合语法规范BEGIN T,而SYM=DO BEGIN Advanced;测试结束结束,程序测试;开始。而SYM=*开始前进;预测分析程序,预测分析程序工作过程,实现LL(1)分析的另一个有效方法是使用一个分析表和一个堆栈进行联合控制。下面介绍的预测分析程序是属于这种类型的L1(1)分析仪。预测分析表和预测分析以ma和a的形式表

2、示MA,其中a是非终止符,a是终止符或#。矩阵元素Ma和A存储关于A的产生式,其指示当A面对输入符号A时应该采用的候选。MA和A还可以存储“错误标志”,指示A根本不应该面对输入符号A。预测分析过程概述,预测分析程序的通用控制程序总是根据STACK顶部的符号X和当前输入符号a进行操作。如下图所示,对于任何(X,a),主控制程序每次都执行以下三种可能的操作之一:如果X=a=#,则分析被宣布成功,分析过程停止。如果X=a #,X将从STACK的顶部弹出,a将指向下一个输入符号。如果X是非终止符,则检查分析表m。如果MX中存储有关于X的生产公式,则首先从堆栈顶部弹出X,然后将生产公式的右符号串以相反的

3、顺序一个接一个地推入堆栈(如果右符号为,则表示不会将任何东西推入堆栈)。与产品相对应的语义动作应该在产品的正确符号被放回堆栈的同时完成(暂时)。如果“错误标志”存储在MX、A和A中,则调用错误诊断程序“错误”。预测分析过程示例,i1*i2 i3,步骤,符号堆栈,输入字符串,使用的生产公式,0,# e,I * ii #,1,# et,I * ii #,ete,2,# ETF,I * ii #,tft,3,# ETI,I * i #,fi,8,# et,i #,9,# e,i #,t,10,# et,I #,e te,11,# et,I #,12,# ETF,I #,tft,13如果X也是一个产品

4、,将其添加到第一个(X)。如果XY是生产和YVN,则第一个(Y)中的所有非元素都添加到第一个(X)中;如果XY1Y2Yk是一个生产公式,y1,yi-1是非终止符,并且FIRST(Yj)包含任何j,1ji-1,那么FIRST(Yi)中的所有非元素都被放入FIRSt(X);特别地,如果所有的FIRST(Yj)包含,j=1,2,k,它将被添加到FIRST(X),并且FIRST集合构造的例子是first (e)=,first (t)=*,first (f)=(,ifrst(T)=(,if FIRSt(E)ETE E TE | TFT * FT | F(E)| I,预测分析表的构造,FOUND集合#在F

5、OUND(S)中的构造用于语法的开始符号S。如果AB是一个产品,则在跟随(B)中添加第一个()。如果AB是一个产品或AB是一个产品并且=(即,第一个(),则在FOLLOW(A)之后加上FOLLOW(B)。构造分析表m的算法如下:对语法g的每个产生a执行步骤2和步骤3;向MA添加一个,每个终结器一个(第一个);如果是第一个,则在主协议中增加一个,在任何后续协议中增加一个。用“错误标志”标记所有未定义的ma和a。FOUND集合的构造示例,FOUND(e)=,# FOUND(e)=,# FOUND(t)=,# FOUND(t)=,# FOUND(f)=*,#,et e | t * ft | f Fi

6、rst(f)=(,if rst(t)=(,if rst(e)=(,I,ll (1)错误处理在分析、错误发生和基本实践中,堆栈顶部的终止符与当前输入符号不匹配。非终结符a位于堆栈顶部,它所面对的输入符号是a,但分析表m中的MA、a和a为空。基本方法是跳过输入字符串中的一些符号,直到遇到“同步符号”。这种方法的效果取决于同步符号集的选择。选择同步符号集,并将跟随(A)中的所有符号放入非终止符A的同步符号集中。如果我们跳过一些输入符号,直到跟随(A)中的同步符号出现,我们将弹出堆栈中的A,以便继续分析。对于非终结符A,仅使用跟随(A)作为其同步符号集是不够的。例如,如果使用分号作为语句的终止符,则用

7、作语句开头的关键字可能不在生成表达式的非终止符的FOUND集合中。这样,赋值语句后缺少分号可能会导致跳过下一条语句开头的关键字。如果第一个(A)中的符号被添加到非终止符A的同步符号集,当第一个(A)中的符号出现在输入中时,可以根据A恢复语法分析以选择同步符号集。如果非终止符产生空字符串,派生表达式可以用作默认情况,这可能会延迟一些错误检查。这种方法减少了错误恢复过程中必须考虑的非终结符的数量。如果堆栈顶部的终端符号不匹配,一个简单的方法是在堆栈顶部弹出终端符号,并发送一条消息指示终端符号已被插入,然后继续解析。因此,该方法使得一个单词符号的同步符号集包含所有其他单词符号。对于修改后的分析表,如果遇到MA,则A为空,输入符号A被跳过。如果项目是“同步的”,堆栈顶部的非终止符会弹出;如果是初始状态,则有必要继续读入下一个输入符号,直到该项不为空或“同步”;如果堆栈顶部的终端符号与输入符号不匹配,则会弹出堆栈顶部的终端符号。错误处理示例),i* i,step,符号堆栈,输入字符串,note,0,#E),i* i#,1,#E,i* i#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论