编译原理-自底向上优先分析概述

前言

  • 前面学了自顶向下的分析方法,它是使用推导的方式进行语法分析。这里学的自底向上优先分析是使用规约进行的语法分析
  • 自底向上优先分析的原理:从输入串开始,朝着文法的开始符号进行规约,直到到达开始符号。这是一个最左规约的过程
  • 自底向上优先分析的分类:简单优先分析法、算符优先分析法
  • 自底向上分析所使用的自动机是PDA(下推自动机)
    PDA

工作方式“移进-规约”

  • 从左至右让输入串进栈,在移动的过程中不断查看栈顶符号,一旦形成某个句型的句柄就进行替换,直到栈顶不再形成句柄为止。然后继续读入符号,重复上述过程。直到栈顶剩下S#,输入串只有#为止。
  • 注意
    • 初态时,栈内只有#,读头指向最左边的单词
    • 程序的执行动作
      1)移入:读最左边的单词
      2)规约:对栈顶进行规约,并输出产生式的编号
      3)识别成功:栈顶剩下S#,输入串只有#

例子

  • 存在如下文法
1. S → aAcBe      2. A → b      3.A → Ab      4.B → d

问:abbcde是不是该文法的合法句子

解:
1)为了便于后续分析,我们先画出语法树
语法树

2)进行操作,在规约的时候,按句柄(树的最左的一步推导得到的叶子)规约

序号输入带输出带操作类型
1#abbcde#
2abbcde#移进
3abbcde#移进
4aAbcde#2规约
5aAbcde#2移进
6aAcde#2,3规约
7aAcde#2,3移入
8aAcde#2,3移入
9aAcBe#2,3,4规约
10aAcBe#2,3,4移入
11S#2,3,4,1规约

3)进过上述操作后,最后得到栈内元素为 #S,输入串为#,表示识别成功。所以abbcde是该文法的合法句子

  • 注意:这里有个前提,是我们已经把语法树给画出来了,所以可以从图中方便的找到句柄。计算机该如何找到句柄呢?这是后面学习的内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值