编译原理学习(三)--语法分析树

语法分析树用图形方式展现了从文法的开始符号推导出相应语言中的符号串的过程。在具体理解语法分析树之前需要先理清楚一些基本概念:

①.产生式

用变量expr来表示表达式,用变量stmt表示语句,那么这个构造规则可以表示为:stmt--->if(expr)stmtelse stmt

其中的箭头(--->)可以读作“可以具有以下形式”,这样的规则称为产生式。

②.文法定义

关于文法定义中的终结符和非终结符,就参看另外一篇转载的文章。

 

语法分析树:

   注释:零个终结符号组成的串称为空串,记为∈。

举例说明: 9 - 5 + 2的语法树

分析:根节点的标号为list,即为文法开始的符号。得出文法产生式:

list ---> list + digit

根节点的子节点经过类似推导:

list ---> list - digit

list ---> digit

digit---> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

一棵语法分析树的叶子节点从左向右构成了树的结果,也就是从根节点上的非终结符号推导得到的符号串:9 - 5 + 2

一句话:为一个给定的终结符号串构建一棵语法分析树的过程称为对该符号串进行语法分析

 

 理解了以上的内容之后,可以尝试做一下龙书第二章的习题,以加深理解:

2.2.1: 考虑下面的上下文无关文法:
S → SS+ | SS* |a

1)试说明如何使用该文法生成串aa+a*。
2)试为aa+a*构造一个分析树。
3)该文法产生的语言是什么?
解答:
1)S => SS* => SS+S* => aa+a*
2)
3)以a为变量,+和*为二元操作符的后缀表达式
 
2.2.2 下面的文法产生什么语言?
1)S→0S1|01

  {0n1n(n=1,2,…)}

2) S→+SS|-SS|a

  以a为变量,+和-为二元操作符的前缀表达式

3)S→S(S)S|ε

  括号的匹配

4)S→aSbS|bSaS| ε

  由相同数目的a、b组成的字符串,或者空串。

5)S→a|S+S|SS|S*|(S)

  以a为数据元素,具有合并、连接、闭包和括号操作符的表达式。a是表达式,若S是表达式则S+S(表达式的合并)、SS(表达式的串联)、S*(表达式的闭包运算)都是表达式。

 

2.2.3 练习2.2.2中哪些文法具有二义性?
—3、4、5具有二义性。
—可通过画某个串的分析树来说明
 
  • 12
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值