编译原理文法及语言
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
❖ 以自然语言为例,人们无法列出全部句子,但 是人们可以给出一些规则,用这些规则来说明 (或者定义)句子的组成结构,比如汉语句子可 以是由主语后随谓语而成,构成谓语的是动词 和直接宾语。“我是大学生”。是汉语的一个 句子
〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷=我|你|他 〈名词〉∷=王明|大学生|工人|英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷=是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉
2.3文法和语言的形式定义
❖ 规则(也称重写规则、产生式或生成 式):是形如α→β或α::=β的 (α,β)有序对,其中α为字母表的 正闭包中的符号, β为字母表的闭 包中的符号,α称为规则的左部, β称为规则的右部。
❖ 规则是文法的核心。
来自百度文库
2.3 文法和语言的形式定义
❖ 所谓的形式定义就是用符号串来描述文法规则 的表述。
目标是用有穷的规则描述无穷的语言
2.3文法和语言的形式定义
❖ 如何来描述一种语言? 如果语言是有穷的(只含有有穷多个句子),可以将 句子逐一列出来表示 如果语言是无穷的,找出语言的有穷表示。语言的有 穷表示有两个途经:
❖ 生成方式 (文法):语言中的每个句子可以用严格定义的规 则来构造。
❖ 识别方式(自动机):用一个过程,当输入的一任意串属于语 言时,该过程经有限次计算后就会停止并回答“是”,若不属 于,要麽能停止并回答“不是”,(要麽永远继续下去。)
❖ 符号串:由字母表中的符号组成的任何有穷序列称为符 号串。
❖ 符号串涉及的有关概念有:符号的顺序、符号串的长度、 空符号串、符号串的头尾、符号串的省略写法、符号串 的连接、符号串的幂、符号串的集合。
❖ 符号串集合:若集合A中所有元素都是某字母表上的符 号串,则称A为字母表上的符号串集合。
❖ 两个符号串集合A和B的乘积定义为AB =xy|xA且yB。 若集合A=ab,cde,B=0,1,则 AB=ab1,ab0,cde0,cde1。
❖ Σ={0,1} Σ* ={ε,0,1,00,01,10, 11,000,001,010,…}
❖ Σ*= Σ0U Σ1U Σ2 U … U Σ n U … ❖ Σ*称为集合Σ的闭包: ❖ 正闭包:Σ+= Σ1U Σ2 U … U Σ n U …
❖ Σ*= Σ0U Σ+
❖ Σ+ = Σ Σ*= Σ* Σ
2.1 文法的直观概念
❖ 语法是用来描述语言的组成规则。语句是组成语 言的基本元素。而组成语言的语句往往是无穷列 举的,这时就要给出一些规则来描述句子的组成 结构。
❖ 构成语句的组织规则就是语法的表现。而这种规 则或者说这种语言的描述就是文法。
❖ 使用文法工具,不仅为了严格地定义句子的结构, 也是为了用适当条数的规则把语言的全部句子描 述出来,是以有穷的集合刻画无穷的集合的工具。
第二章 文法和语言
❖ 2.1 文法的直观概念 ❖ 2.2 符号和符号串 ❖ 2.3 文法和语言的形式定义 ❖ 2.4 文法的类型 ❖ 2.5 上下文无关文法及其语法树 ❖ 2.6 句型的分析 ❖ 2.7 有关文法实用中的一些说明
第三章 文法和语言
❖ 程序设计语言与自然语言一样,完整的定义包括语法和 语义两个方面。
❖ 有了一组规则以后,按照如下方式用它们导出句子:开始 去找∷=左端的带有〈句子〉的规则并把它由∷=右端的符 号串代替,这个动作表示成:
❖ 〈句子〉 〈主语〉〈谓语〉,
❖ 然后在得到的串〈主语〉〈谓语〉中,选取〈主语〉或 〈谓语〉,再用相应规则的∷=右端代替之。
❖ 句子:“我是大学生”的全部动作过程是:
❖ 形 S)式。定其义中1:,文法G定义为四元组(VN,VT,P,
VN为非终结符号(或语法实体,或变量)集; VT为终结符号集; P为产生式(也称规则)的集合; (VN,VT和P是非空有穷集。) S称做识别符号或开始符号,它是一个非终结符,至
少要在一条规则中作为左部出现。 示VNV和NVTV不T,含V公称共为的文元法素G,的即字V母N表V或T字=汇。表通。常用V表
❖ 〈句子〉 〈主语〉〈谓语〉 〈代词〉〈谓语〉 我〈谓语〉 我〈动词〉〈直接宾语〉 我是〈直接宾 语〉 我是〈名词〉 我是大学生
❖ “我是大学生”的构成符合上述规则,而“我大学生是” 不符合上述规则,我们说它不是句子。这些规则成为我们 判别句子结构合法与否的依据,换句话说,这些规则看成 是一种元语言,用它描述汉语。这里仅仅涉及汉语句子的 结构描述。其中一种描述元语言称为文法。
❖ 使用 * 表示 上的一切符号串(包括ε)组成的集合。 Σ*称为Σ的闭包。
❖ 上的除ε外的所有符号串组成的集合记为+ 。Σ+称为 Σ的正闭包。
❖ 例:Σ={a,b}
❖
Σ*={ε,a,b,aa,ab,ba,bb,aaa,…}
❖
Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}
❖ 指定字母表Σ, Σ*表示Σ上的所有有穷长 的串的集合。
2.2 符号和符号串
❖ 程序设计语言的表达方式就是一个一个的程序。而程序 又是由一个个指令语句组成。语句又是由数字和字母这 样一些基本符号所组成。
❖ 程序设计语言可以看成是在基本符号集上定义的,按照 一定规则构成的一切基本符号串组成的集合。
❖ 字母表:是元素的非空有穷集合,这里所指的元素就是 符号。不同的语言可以有不同的字母表。
例
文法G =(VN,VT,P,S),其中 VN ={S} VT ={0,1} P ={S 0S1, S 01} 可见该文法中非终结符中只含一个符号S, 终结符中含两个符号0和1,由两个产生式,开
始符号是S.
例 文法G=(VN,VT,P,S) VN ={标识符,字母,数字} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符>
❖ 所谓语法是指一组规则,用它可以形成和产生一个合适 的程序。
❖ 语法只是定义什么样的符号序列是合法的,与符号的含 义无关。
❖ 语义有两种类型:静态语义是一系列限定规则,确定哪 些合乎语法的程序是合适的;动态语义也称运行语义或 执行语义,表明程序要做些什么?要计算什么。
❖ 文法是阐明语法的一种工具,描述语法的规则。