当前位置: 首页 > news >正文

【编译原理笔记】4.2 Context-free Grammar

1. 上下文无关文法的基本定义

1.1 四个核心组成部分

上下文无关文法(CFG)由四个基本要素构成:\color{red}G=(T,N,P,S)

a) 终结符号集合(Terminal Symbols)
  • 定义:构成语言基本单元的符号,不可再分解

  • 示例:在算术表达式中:{id, +, -, *, /, (, )}

  • 特点:是语言的"字母表",出现在最终句子中

b) 非终结符号集合(Nonterminals)
  • 定义:表示语法类别的变量,可被进一步展开

  • 示例{expression, term, factor}

  • 作用:描述语言的层次结构

c) 产生式集合(Productions)
  • 结构非终结符 → 符号序列

  • 组成:

    • 头部(Head/Left Side):单个非终结符

    • 体部(Body/Right Side):终结符和/或非终结符序列

  • 示例expression → expression + term

d) 开始符号(Start Symbol)
  • 定义:推导过程的起点非终结符

  • 约定:通常列在第一个产生式

  • 示例expression

1.2 算术表达式文法示例

完整文法定义

a) 终结符号:{id, +, -, *, /, (, )}b) 非终结符号:{expression, term, factor}c) 产生式:expression → expression + termexpression → expression - termexpression → termterm → term * factorterm → term / factorterm → factorfactor → (expression)factor → idd) 开始符号:expression

2. 文法表示约定

2.1 标准符号约定

为了简化描述,采用以下标准约定:

符号类型表示方法示例含义
非终结符大写字母A, B, S语法变量
终结符串小写字母x, y, z终结符序列
任意符号串小写希腊字母α, β, γ终结符和非终结符混合
开始符号大写字母S推导起点
选择运算竖线|or

2.2 简化表示示例

原始文法

expression → expression + termexpression → expression - termexpression → termterm → term * factorterm → term / factorterm → factorfactor → (expression)factor → id

简化表示

E → E + T | E - T | TT → T * F | T / F | FF → (E) | id

3. 推导(Derivation)概念

3.1 推导的基本过程

定义:从开始符号出发,通过反复应用产生式替换非终结符的过程

推导步骤示例

开始:E步骤1:E ⇒ -E              (使用 E → -E)步骤2:-E ⇒ -(E)           (使用 E → (E))步骤3:-(E) ⇒ -(id)        (使用 E → id)结果:-(id)

3.2 重要概念定义

a) 句型(Sentential Form)
  • 定义:如果 S ⇒* α(S是文法G的开始符号),则称α是G的一个句型

  • 特点:可能包含非终结符,是推导过程中的中间形式

b) 句子(Sentence)
  • 定义:不含非终结符的句型

  • 特点:完全由终结符组成,是语言的合法字符串

c) 语言(Language)
  • 定义:文法G生成的所有句子的集合,记作L(G)

  • 公式:L(G) = {w | S ⇒* w, w是终结符串}

4. 推导的类型

4.1 最左推导(Leftmost Derivation)

规则:在每个句型中总是替换最左边的非终结符

示例推导

E ⇒ E - E           (替换最左E)⇒ (E) - E         (替换最左E)⇒ (E + E) - E     (替换最左E)⇒ (id + E) - E    (替换最左E)⇒ (id + id) - E   (替换最左E)⇒ (id + id) - id  (替换最左E)

表示符号⇒lm

4.2 最右推导(Rightmost Derivation)

规则:在每个句型中总是替换最右边的非终结符

表示符号⇒rm

特点:与自底向上分析对应,也称为规范推导

5. 语法分析树(Parse Tree)

5.1 分析树的定义

分析树是推导过程的图形化表示,具有以下特性:

  1. 根节点:标记为开始符号

  2. 叶节点:标记为终结符或ε

  3. 内部节点:标记为非终结符

  4. 父子关系:如果A → X₁X₂...Xₙ是产生式,则节点A有n个子节点X₁,X₂,...,Xₙ

5.2 分析树示例

对于推导 E ⇒ -E ⇒ -(E) ⇒ -(id),对应的分析树:

E|-|E/|\( E )|id

5.3 推导与分析树的关系

  • 多对一关系:多个推导可能对应同一棵分析树

  • 唯一对应:每个分析树有唯一的最左推导和最右推导

  • 结构表达:分析树忽略替换顺序,只关注语法结构

6. 二义性(Ambiguity)

6.1 二义性定义

定义:如果文法对某个句子生成多于一棵分析树,则称该文法是二义性的

等价表述

  • 对同一句子存在多个最左推导

  • 对同一句子存在多个最右推导

6.2 经典二义性示例

问题文法

E → E + E | E * E | -E | (E) | id

句子id + id * id

两个不同的分析树

树1:E → E + E       树2:E → E * E→ E + E * E          → E + E * E→ id + id * id       → id + id * id

优先级问题:树1表示(id + id) * id,树2表示id + (id * id)

7. 上下文无关文法与正则表达式的关系

7.1 表达能力比较

a) CFG可以描述RE

定理:对于任何正则表达式r,可以构造CFG G使得L(r) = L(G)

构造方法(NFA到CFG的转换):

  1. 为NFA的每个状态i创建非终结符Aᵢ

  2. 如果状态i在输入a上转移到状态j,添加产生式Aᵢ → aAⱼ

  3. 如果状态i在ε上转移到状态j,添加产生式Aᵢ → Aⱼ

  4. 如果状态i是接受状态,添加Aᵢ → ε

  5. 如果状态i是开始状态,使Aᵢ成为文法的开始符号

b) CFG比RE更强大

关键区别:CFG可以描述嵌套结构,而RE不能

示例语言:L = {aⁿbⁿ | n ≥ 1}

  • CFG描述:S → aSb | ab

  • RE无法描述:因为需要"计数"能力

实际应用:平衡括号、匹配的if-else、对应的begin-end等

7.2 实际意义

  • 词法分析:使用正则表达式描述单词模式

  • 语法分析:使用CFG描述程序结构

  • 分工明确:词法分析处理简单模式,语法分析处理复杂结构

8. 示例与练习

8.1 语言生成示例

问题:为语言L = {aⁿbⁿ | n ≥ 1}写CFG

解答

S → aSb | ab

推导验证

n=1: S ⇒ ab
n=2: S ⇒ aSb ⇒ aabb
n=3: S ⇒ aSb ⇒ aaSbb ⇒ aaabbb

8.2 文法转换练习

正则表达式(a|b)*abb对应的NFA状态转移

转换为CFG

A₀ → aA₀ | bA₀ | aA₁A₁ → bA₂A₂ → bA₃A₃ → ε
http://www.dtcms.com/a/562451.html

相关文章:

  • 深圳大鹏住房和建设局网站pythom 网站开发规范
  • 江西网站设计欣赏网页模板免费版
  • 编译原理笔记汇总
  • 怎么免费建立自己的网站步骤域名注册网站制作
  • 长春网站建设wang亚马逊购物网站
  • html5 网站 优势工程公司简介
  • java学习--类和对象的关系
  • 丽江建设信息网站Divi WordPress企业建站主题
  • 阿里云服务器做电影网站缩我短链接生成器
  • 网站建设计划书范本网站开发学什么语音
  • 【C++/STL】set和multiset的使用
  • 淘宝哪些做网站关键词排名的有用吗建设一个营销型网站
  • 2025python学习笔记Part2
  • 简单介绍一下信息摘要/数字签名
  • 重庆seo推广外包漳州网站建设优化
  • 高等院校网站建设方案搜索引擎官网
  • 网站服务器是指什么重庆网站服务器
  • 旅游网站建设步骤北京网站开发公司有哪些
  • AOI在医疗设备检测领域中的应用
  • 重庆网站seo诊断网站被抄袭
  • c# 手机版网站开发公众号小程序开发公司
  • 网站建设会议讲话西安百度网站快速排名
  • 有批量做基因结构的网站吗杭州网络排名优化
  • 山东网站制作公司排名大数据营销系统软件
  • 建一个网站需要多少钱网站怎么做的如何更改网站关键词
  • 织梦首饰网站模板解答网站内容优化策略
  • 实现qq邮箱发送验证码登录
  • 泰安集团网站建设方案南宁百度关键词排名公司
  • 链家在线网站是哪个公司做的网络营销课程培训课程
  • PostgreSQL 16 性能调优指南