编译原理-文法
2009-11-20 15:18
2341 查看
Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}
其中Σ*是Σ的闭包,而Σ+是Σ的正闭包
语言的有穷表示有两个途经: 生成方式 (文法):语言中的每个句子可以用严格定义的规则来构造。 识别方式(自动机):用一个模型,当输入的一任意串属于语言时,该过程经有限次计算后就会停机并回答“是”,若不属于,要麽能停机并回答“不是”,要麽不停机永远继续下去。
文法即是生成方式描述语言的:语言中的每个句子可以用严格定义的规则来构造.
文法的定义
定义3.1 文法G定义为四元组(VN,VT,P,S ),其中 VN为非终结符号(或语法实体,或变量)集; VT为终结符号集; P为产生式(也称规则)的集合; S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。 VN,VT和P是非空有穷集。 VN和VT不含公共的元素,即VN ∩ VT = φ 用V表示VN ∪ VT ,称为文法G的字母表或字汇表
规则(重写规则、产生式或生成式)是形如α→β或α∷=β的(α,β)有序对,其中α是字母表V的正闭包V+中的一个符号,β是V*中的一个符号。α称为规则的左部,β称作规则的右部。
例如 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 }, S为开始符号
再如: 文法G=(VN,VT,P,S) VN ={<标识符>,<字母>,<数字>} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符>
句型、句子的定义
定义3.5 句型 设有文法G[S],若S =>* x,则称x是文法G的句型。
句子设有文法G[S],若S =>* x,且x∈VT*,则称x是文法G的句子。
1.已知文法G[A],写出它定义的语言描述
如:G[A]: A → 0B|1C B → 1|1A|0BB C → 0|0A|1CC
答案:G[A]定义的语言由0、1符号串组成,串中0和1的个数相同.
2.给出语言描述,构造文法.
如:构造一文法,其定义的语言是由算符+, *, (,)和运算对象a构成的算术表达式的集合.
答案1: G[E] E→E+T|T T→T*F|F F→(E)|a
文法G定义为四元组(VN,VT,P,S ),其中 VN为非终结符号(或语法实体,或变量)集; VT为终结符号集; P为产生式(也称规则)的集合; S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。 VN,VT和P是非空有穷集。 VN和VT不含公共的元素,即VN ∩ VT = φ 用V表示VN ∪ VT ,称为文法G的字母表或字汇表
规则(重写规则、产生式或生成式)是形如α→β或α∷=β的(α,β)有序对,其中α是字母表V的正闭包V+中的一个符号,β是V*中的一个符号。α称为规则的左部,β称作规则的右部。
例如 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 }, S为开始符号
再如: 文法G=(VN,VT,P,S) VN ={<标识符>,<字母>,<数字>} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符>
最通俗的例子:
G=(Vt,Vn,S,P)
其中:
Vt={张三,李四,愉快地,高兴的,吃饭,游泳}
Vn={句子,主语,谓语,状语}
S={句子}
P:
句子-->主语谓语
句子-->主语状语谓语
主语-->张三|李四
谓语-->吃饭|游泳
状语-->愉快地|高兴地
那么:
"张三吃饭" 是正确的句子
"张三李四游泳" 不是正确的句子
其中Σ*是Σ的闭包,而Σ+是Σ的正闭包
语言的有穷表示有两个途经: 生成方式 (文法):语言中的每个句子可以用严格定义的规则来构造。 识别方式(自动机):用一个模型,当输入的一任意串属于语言时,该过程经有限次计算后就会停机并回答“是”,若不属于,要麽能停机并回答“不是”,要麽不停机永远继续下去。
文法即是生成方式描述语言的:语言中的每个句子可以用严格定义的规则来构造.
文法的定义
定义3.1 文法G定义为四元组(VN,VT,P,S ),其中 VN为非终结符号(或语法实体,或变量)集; VT为终结符号集; P为产生式(也称规则)的集合; S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。 VN,VT和P是非空有穷集。 VN和VT不含公共的元素,即VN ∩ VT = φ 用V表示VN ∪ VT ,称为文法G的字母表或字汇表
规则(重写规则、产生式或生成式)是形如α→β或α∷=β的(α,β)有序对,其中α是字母表V的正闭包V+中的一个符号,β是V*中的一个符号。α称为规则的左部,β称作规则的右部。
例如 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 }, S为开始符号
再如: 文法G=(VN,VT,P,S) VN ={<标识符>,<字母>,<数字>} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符>
句型、句子的定义
定义3.5 句型 设有文法G[S],若S =>* x,则称x是文法G的句型。
句子设有文法G[S],若S =>* x,且x∈VT*,则称x是文法G的句子。
1.已知文法G[A],写出它定义的语言描述
如:G[A]: A → 0B|1C B → 1|1A|0BB C → 0|0A|1CC
答案:G[A]定义的语言由0、1符号串组成,串中0和1的个数相同.
2.给出语言描述,构造文法.
如:构造一文法,其定义的语言是由算符+, *, (,)和运算对象a构成的算术表达式的集合.
答案1: G[E] E→E+T|T T→T*F|F F→(E)|a
文法G定义为四元组(VN,VT,P,S ),其中 VN为非终结符号(或语法实体,或变量)集; VT为终结符号集; P为产生式(也称规则)的集合; S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。 VN,VT和P是非空有穷集。 VN和VT不含公共的元素,即VN ∩ VT = φ 用V表示VN ∪ VT ,称为文法G的字母表或字汇表
规则(重写规则、产生式或生成式)是形如α→β或α∷=β的(α,β)有序对,其中α是字母表V的正闭包V+中的一个符号,β是V*中的一个符号。α称为规则的左部,β称作规则的右部。
例如 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 }, S为开始符号
再如: 文法G=(VN,VT,P,S) VN ={<标识符>,<字母>,<数字>} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符>
最通俗的例子:
G=(Vt,Vn,S,P)
其中:
Vt={张三,李四,愉快地,高兴的,吃饭,游泳}
Vn={句子,主语,谓语,状语}
S={句子}
P:
句子-->主语谓语
句子-->主语状语谓语
主语-->张三|李四
谓语-->吃饭|游泳
状语-->愉快地|高兴地
那么:
"张三吃饭" 是正确的句子
"张三李四游泳" 不是正确的句子
相关文章推荐
- 编译原理--文法的理解
- 编译原理之正规文法和正规式
- 编译原理四种文法类型
- 编译原理(六) LL(1)文法分析法(分析过程的C++实现)
- 编译原理与编译构造 LR文法
- 编译原理0型到3型文法
- 编译原理与文法
- 编译原理——文法类别
- 编译原理4种文法类型
- 编译原理学习笔记01——(通过老外吃中餐—学最基本文法概念)——2014_1_11
- 【编译原理】(2)上下文无关文法
- 编译原理-第2部分形式语言导论-第二节文法和语言-第一小节文法和语言的概念(文法)
- 编译原理LL(1)文法
- 编译原理-第2部分形式语言导论-第二节文法和语言 第二小节形式语言分类
- 编译原理(3)-----0型文法和图灵机
- 编译原理-文法
- 编译原理(2) 文法 有限自动机 正规式
- 编译原理学习周入门教程--(4)文法类型
- 编译原理LL1文法分析表算法实现
- 编译原理(十) SLR文法分析法(算法原理和C++实现)