组成

可以看作一个四元组

  1. 终结符号(Terminal)集合,对应于词法分析器产生的词法单元
  2. 非终结符号 (Non-terminal) 集合;
    • 非终结符号可以再次展开,而终结符号不行
  3. 产生式 (Production) 集合;
    • 头部/左部 (Head) : 单个非终结符
    • 体部/右部 (Body) : 终结符与非终结符构成的串,也可以是空串
  4. 开始(Start)符号。要求 且唯一。

三个图灵奖得主,BNF范式(左边两位),右边那位扩展了BNF,变成了[E]BNF 图灵奖得主

语义

一个上下文无关文法定义了一个语言

推导

image.png

将某个产生式的左边替换为它的右边,每一步推导需要选择替换哪一个非终结符号,以及使用哪一个产生式

image.png

一般只考虑两种情况:即每次选择最左边的和最右边的

句型

如果,那么称是文法的一个句型

句子

如果,那么的一个句子,句子是一种特殊的句型

文法生成的语言

文法的语言就是它能推导的所有句子的集合

文法基本问题

Membership问题

Membership问题:给定字符串吗?

todo

究竟是什么

设计语言是,设计者需要很清楚的知道自己设计的是啥

给定文法,找出语言是什么

image.png

给定语言,那么文法是什么

回文串语言

Question

字母表上的所有回文串构成的语言

带数量关系的语言

Question

image.png

带任意的语言

Question

ab组成的串中ab个数相同

Question

ab组成的串中ab个数不相同

表达能力

Chomsky Hierarchy:一种分类语言文法的层次结构

正则表达式的表达能力严格弱于上下文无关文法

证明

需要证明两点:

  • 有上下文无关文法能表达的语言,但是正则表达式无法表达
  • 任意正则都能用上下文无关表达

证明正则都能用上下文无关表达

用上下文无关文法来模拟NFA

上下文无关模拟NFA

证明有上下文无关无法用正则表达

image.png 如何证明这个不能用正则表达?反证法

如果能用正则表达式描述,那么就能用DFA描述。

设有一个有限状态自动机,状态数为

考虑输入时,有k个状态但是却有m步,自动机一定会出现相同的状态。 那么如果能被接受,就存在一个错误的也能被接受,因此是错误的。 image.png

这个定理叫做Pumping Lemma,中文叫汞定理

此外,这个定理还能证明某个语言无法被上下文无关文法表达,不如说下面这个 image.png