编译原理 [0x03][0x01] ==(4.2) 语法分析--自上而下分析所遇到的问题

基本思想

 

  • 从文法的开始符号出发,向下推导,推出句子
  • 针对输入串,试图用一切可能的办法,从文法开始符号(根结点)出发,自上而下地为输入串建立一棵语法树

 自上而下分析示例

假定有文法G(S):

           (1) S→xAy

           (2) A→**|* 

   分析输入串x*y(记为a)

 

Ps:IP是输入串指针,指向谁就是谁(图中是步骤1、2、3、4、5、6、7)

此时由此例子引出了多个候选式带来的问题

 

 多个产生式候选带来的问题

 

      回溯问题

 

  • 分析过程中,当一个非终结符用某一个候选匹配成功时,这种匹配可能是暂时的
  • 出错,不得不“回溯

 

Ps:正如上面的例子,我们并没有一遍得到结果,因为  “(2) A→**|*  这个有两个候选式,我们默认从左往右一个一个试,第一个候选式A→**并不符合要求,即错误的结果,我们就回溯一次,重新选择第二个候选式 A→*,当候选式足够多,这样的回溯次数是不可控制和预估的

 

 

      文法左递归问题

  一个文法是含有左递归的,如果存在非终结符P

                                                                                     P \overset{}{+}\Rightarrow Pa

经过一步或者多步推导出来又能推出一个串,而这个串又已它自身开头,我们称这个文法是由左递归的

假设我们现在需要输入串aa

   左递归可能导致输入串的指针停滞不前,因为每次选择候选式pa,因为每次的得到的非终结符P都和输入串第一个a不对应,导致指针不会往后移动,但语法树无限增长陷入死循环

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值