3.1 上下无关文法|3.2 语言和文法

本章要点

  • 文法和语言的基本知识

  • 自上而下的分析方法:预测分析,非递归的预测分析,LL(1)文法

  • 自下而上的分析方法:SLR(1)方法,规范LR(1)方法和LALR(1)方法

  • LR方法如何用于二义文法

开心的东西要专心记起

3.1 上下文无关文法

3.1.1 上下文无关文法的定义

正规式能定义一些简单的语言,能表示给定结构的固定次数的重复或者没有指定次数的重复
例:a (ba)^5, a (ba)*

正规式不能用于描述配对或嵌套的结构
例1:配对括号串的集合
例2:{wcw | w是a和b的串}

1. 定义

image

3.1.2 推导

把产生式看成重写规则,把符号串中的非终结符用其产生式右部的串来代替

  • 最左推导
  • 最右推导(规范推导)

3.1.3 分析树

image

3.1.4 二义性

两个不同的最左推导

image
两棵不同的语法树
image

3.2 语言和文法

3.2.1 正规式和上下文无关文法的比较

3.2.2 分离词法分析器理由

为什么要用正规式定义词法

  • 词法规则非常简单,不必用上下文无关文法
  • 对于词法记号,正规式描述简洁且易于理解
  • 从正规式构造出的词法分析器效率高

从软件工程角度看,词法分析和语法分析的分离有如下好处:

  • 简化设计(划分模块)
  • 编译器的效率会改进
  • 编译器的可移植性加强(相关修改限制在词法分析器中)
  • 便于编译器前端的模块划分

能否把词法分析并入到语法分析中,直接从字符流进行语法分析

  • 若把词法分析和语法分析合在一起,则必须将语言的注解和空白的规则反映在文法中,文法将大大复杂
  • 注解和空白由自己来处理的分析器,比注解和空格已由词法分析器删除的分析器要复杂得多

3.2.4 适当的表达式文法

用一种层次观点看待表达式
image
文法
image

3.2.5 消除二义性

stmt   →  if expr then stmt
		    | if expr then stmt else stmt
		    | other 

句型:if expr then if expr then stmt else stmt
两个最左推导:

stmt → if expr then stmt 
	   | if expr then if expr then stmt else stmt
stmt → if expr then stmt else stmt 
	 → if expr then if expr then stmt else stmt 

无二义的文法

stmt  → matched _stmt 
	    | unmatched_stmt
matched_stmt → if expr then matched_stmt 
		  else matched_stmt 
	    | other
unmatched_stmt → if expr then stmt
	    | if expr then matched_stmt 
		  else unmatched_stmt

3.2.6 消除左递归

image
image

3.2.7 提左因子

image
image

3.2.9 形式语言鸟瞰

image
短语文法、上下文有关文法、上下文无关文法、正规文法

posted @ 2021-05-16 12:14  辛勤的小码农^-^  阅读(542)  评论(0)    收藏  举报