您的位置:首页 > 其它

编译原理-文法

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:
句子-->主语谓语
句子-->主语状语谓语
主语-->张三|李四
谓语-->吃饭|游泳
状语-->愉快地|高兴地
那么:
"张三吃饭" 是正确的句子
"张三李四游泳" 不是正确的句子
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: