文法和语言.
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:文法G=(VN,VT,P,S)
VN ={标识符,字母,数字}, VT ={a,b,c,…x,y,z,0,1,…,9}, P={<标识符>→<字母>, <标识符>→<标识符><字母> <标识符>→<标识符><数字>, <字母>→a, …, <字母>→z, <数字>→0,…,<数字>→9 }, S=<标识符>
α、β、γ
左部相同的产生式A→α,A→β可以记为A→α|β, 其中“|”是“或”的意思,α,β分别称为侯选式
如:对于文法
G:S→0S1 S→01
可写成 G[S]:S→0S1 S→01
例:文法G=(VN,VT,P,S) 其中:VN={S},VT={0,1},
P={S→0S1,S→01} 开始符为S
形式语言
Chomsky于1956年提出了一种用来描述语言的数学系 统。人们把用一组数学符号和规则来描述语言的方式 称为形式描述,而把所用的数学符号和规则称为形式 语言。
形式语言,只是从语法上研究语言。它是抽象的数学 系统,用于模拟程序设计语言的语法,或者是并不很 成功地模拟自然语言如英语的语法。
形式语言理论是编译理论的重要基础,它主要研究组 成符号语言的符号串的集合及它们的表示法、结构与 特性。
符号串的方幂:把符号串a自身连接n次 得到的符号串an = aa…aa 例如 a1=a a2=aa a0=ε
4. 符号串集合: 定义: 若集合A中所有元素都是某字母表上 的符号串,则称A为字母表上的符号串集合。
符号串集合的乘积:符号串集合A和B的乘积 定义为: AB ={xy|x∈A且y∈B},即AB是由A中的串x 和B中的串y连接而成的串xy组成的集合。 若集合A = ab,cde B = 0,1 则 AB = ab0,ab1,cde0,cde1 显然 {ε}A = A{ε} = A
文法与语言
一个程序设计语言的确切定义是构造编 译程序的重要前提。 文法被用来精确而无歧义地描述语言的 构成方式. 文法描述语言的时候不考虑语言的含义。
2.1 语言和文法的直观概念
程序设计语言的定义 语言是一个记号系统。 汉语--符合汉语语法的句子的全体 英语--符合英语语法的句子的全体 程序设计语言--该语言的程序的全体 程序设计语言由语法和语义定义:
形式语言和编译理论中的 最基本概念 ——符号串和符号串集合
基本定义 它们的运算
2.2 符号和符号串
1. 字母表
定义:元素的非空有穷集合 例:∑={0‚1} Α={a‚b,c} 元素也称为符号,字母表也称符号集。 程序语言的字母表由字母数字和若干 专用符号组成。
2.
符号串 定义:由字母表中的符号组成的任何有穷序列 例: 0,00,10是字母表∑={0‚1}上的符号串 a,ab,aaca是Α={a‚b,c}上的符号串 在符号串中,符号是有顺序的,顺序不同,代 表不同的符号串,如:ab和ba不同 不含任何符号的符号串称为空串,用ε表示 注意:{ε}并不等于空集合{ } 符号串长度: 符号串中含有符号的个数 如: |abc|=3 | ε|=0
1.
语法(syntax)
定义:
是一组规则,用它可以形成和产生 一个合适的程序 描述工具:文法 作用: 定义什么样的符号序列是合法的, 与符号的含义无关。
语义(semantics)
分类:
静态语义:一系列限定规则,确定哪些 合乎语法的程序是合适的 动态语义:表明程序要做什么 描述工具: 指称语义,操作语义等 作用: 检查类型匹配,变量作用域等
子符号串
设有非空符号串 u=xvy,其中符号串
例如 符号串x=a+b*(c+d),则
a, a+b*, 与(c+d)等都 V≠ε ,则称v为 符号串u的子符号串。 是x的子符号串,且 其长度分别为|a|=1, |a+b*|=4, |(c+d)|=5
符号串的头与尾
如果z=xy是一个符 号串,则x是z的头, 而y是z的尾。如果y 非空,则x是z的固 有头;如果x非空, 则y是z的固有尾。
第二章
文法和语言
2.1 文法的基本概念
符号和符号串 文法和语言的形式定义 推导与递归 文法的分类
2.2 句型的分析
语法树 文法的约定 句型的分析方法
主要内容
本章讨论与编译实现相关的形式语言 理论基本概念,主要内容有: 文法与语言的形式定义 Chomsky文法及其分类 上下文无关文法的主要特性 文法的等价变换 句型分析的概念
2 文法形式定义上的约定
文法习惯上只将产生式写出。并有如下约定:
第一条产生式的左部是开始符号,或用G[S]表示S是开 始符号 用尖括号括起的是非终结符,否则为终结符。或者大 写字母表示非终结符,小写字母表示终结符 G可写成G[S],S是开始符号 希腊字母代表由终结符号和非终结符号组成的符号串
例如:
文法G[S]: S→A|SA|SD A→a|b|…|z D→0|1|…|9
3. 推导(Derivation)与归约(Reduction) 直接推导和直接归约: α →β 是文法G的产生式,若有v,w满足: v=γ α δ ,w=γ β δ , 其中γ ,δ ∈V* 则称v直接推导出w,也称w直接归约到v, 记作 v w 直接推导就是用产生式的右部替换产生式 的左部的过程 直接归约就是用产生式的左部替换产生式 的右部的过程
例如:字母表 A={a,b,c}上的符号串 x=abc, 则x的
头:ε, a, ab, abc, 尾:ε, c, bc, abc
固有头: ε, a, ab, 固Fra Baidu bibliotek尾:ε, c, bc
3.
符号串的运算 符号串的连接:设x、y是符号串,它们 的连接是把y的符号写在 x的符号之后 得到的符号串xy
例如 x="ST",y="abu" ,则 xy="STabu" 显然εx = xε=x
说明:
V=VN∪VT,V称为文法G的字母表 P中产生式形如:α→β,其中α∈V+且至少含一个非 终结符,β∈V* VN,VT和P是非空有穷集 VN∩VT=φ S是一个非终结符,且至少要在一条产生式的左部 出现 非终结符代表一个语言中的语法成分,如<赋值语 句>,它是构成程序的一个语法成分,这个符号本 身不会在程序中出现,而终结符是组成程序的具体 的符号。
句子“我是大学生”的推导过程如下: 从句子出发,反复把规则中的”::=”左边的成 分替换成右边的成分。
〈句子〉 〈主语〉〈谓语〉
〈代词〉〈谓语〉
我〈谓语〉
我〈动词〉〈直接宾语〉
我是〈直接宾语〉
我是〈名词〉
我是大学生
文法——介绍
包括四个组成部分:
一组终结符号(不能被替换的符号,单词符 号) 一组非终结符号(能够被替换为终结符号或 非终结符号,语法单位) 一个开始符号(从这个符号开始替换,最大 语法单位-程序) 一组产生式(替换规则,把左边的字符串替 换为右边的字符串)
若存在v =u0 u1 ... un=w, (n>0)
则称v + w,v推导出w,或w归约到v(至少有1 步推导),这个直接推导序列的长度为n。
* 广义推导: 或 *
若有v + w 或 v=w,
则记为v * w,v广义推导出w,w广义规约到v (可以包含0步推导)
三种推导的比较
小结
1 符号与字母表 2 符号串 3 符号串的运算 4 符号串集合 5 集合的闭包 6 字母表的闭包
2.3 文法和语言的形式定义
1.文法的定义 2.文法形式上的约定 3.推导与归约 4.句型、句子、语言的定义 5.文法的等价
“我是大学生”是汉语的一个句子
用::=表示的汉语句子的构成规则:
〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷= 我|你|他 〈名词〉∷= 王明|大学生|工人|英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷= 是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉
例 文法G: S→0S1,S→01 有直接推导: S 0S1 ( S→0S1 ) 0S1 00S11 ( S→0S1 ) 00S11 000S111 ( S→0S1 ) 000S111 00001111( S→01 )
推导例题1
文法G1:S->bA, A->aA|a定义了一个什么样 的语言? S=>bA=>ba S=>bA=>baA=>baa S=>bA=>baA=>baaA=>baaa …… S=>bA=>baA=>…=>ba…a L(G1)={ban|n>=1} L(G1) = { 以b开头后跟一个或多个a的串}
推导例题2
e.g. 文法产生的语言
L(G4)={ambn|m,n1} L(G5) = {anbn|n 1}
G4: S A B A a A | a B b B | b
G5: S a S b | ab
e.g. 文法产生的语言
A=> aB => ab A=> Ab => ab 文法G4对句子aaabb的推导: S => A B S A B => a A B A a A => a a A B A a A => a a a B A a => a a a b B B b B => a a a b b B b
符号串集合的方幂: 设A是符号串的集合, 则称Ai为符号串集A的方幂,其中i是非负整 数。具体定义如下: A0 ={ε } A1 = A , A2 = A A AK = AA......A(k个)
5. 集合的闭包
闭包 集合Σ的闭包Σ *定义如下: Σ * = Σ 0∪ Σ1∪ Σ 2∪ Σ 3∪… 例:设有字母表Σ={0,1} 则Σ*=Σ0∪Σ1∪Σ2∪… ={ε,0,1,00,01,10,11,000,…} 即Σ*表示Σ上所有有穷长的串的集合。
2. 文法的直观概念
如何来描述一种语言?文法是描述语言的语法(形式) 结构的形式规则。 如果语言是有穷的(只含有有穷多个句子),可以将 句子逐一列出来表示 如果语言是无穷的,要找出语言的有穷表示。 有两个途经: 1. 生成方式 (文法):语言中的每个句子可以用严格定 义的规则来构造 2. 识别方式(自动机):用一个过程,当输入的一任意 串属于语言时,该过程经有限次计算后就会停止并回 答“是”,若不属于,要么能停止并回答“不是”, 要么永远继续下去。
关键思路
从文法的开始符号出发, 反复使用产生式,对非终结符进行替换 (展开), 直到整个字符串中不在包含非终结符。 这时,得到了这个文法的一个句子(一 个程序) 这个过程称为推导
1.文法的形式定义
产生式(规则)
产生式是一个有序对(α,β),通常写作 α→β(或α::=β ) 文法定义: 文法G(Grammar)定义为四元组(VN,VT,P,S) VN (Nonternimal):非终结符集 VT (Terminal):终结符集 P (Production):产生式(规则)集合 S:开始符号或识别符号
e.g. 文法产生的语言
文法G5对句子aaaabbbb的推导: S => a S b S a S b => a a S b b S a S b => a a a S b b b S a S b => a a a a b b b b S a b
直接推导序列和广义推导
直接推导序列: + 或+
正闭包
Σ+ = Σ1∪Σ2∪Σ3∪…称为Σ的正闭包。 + 表示上的除ε 外的所有用穷长串的集合 Σ* = Σ0∪Σ+ Σ+ = ΣΣ* = Σ* Σ
字母表上的一个语言是上符合某种规则的一些符号 串的集合 ,是*的一个子集。 例如:Σ ={a,b} Σ *={ε ,a,b,aa,ab,ba,bb,aaa,aab,…} 1. 集合{ab,aabb,aaabbb,…,anbn,…}或 {w|w∈Σ *且w=anbn,n≥1}为字母表上的一个语言。 2. 集合{a,aa,aaa,…}或{w|w∈Σ *且w=an,n≥1}为字母 表上的一个语言。 3.ε 是一个语言。 4. 即 是一个语言。