上下文无关文法

《编译原理》学习总结

匿名 (未验证) 提交于 2019-12-03 00:28:02
《编译原理》学习总结 第二章 上下文无关文法和语言 老师教授了语法、语义等概念,回顾了关于程序语言定义,初等数据类型,数据结构,高级高级语言的一般特性,程序结构,语句与控制结构等内容;程序设计语言的描述工具- 文法,包括文法的定义,文法的种类等内容,用于描述程序设计语言的上下文无关文法,上下文无关文法的推导,上下文无关文法与语言,语法分析树的构造,文法的二义性等;符号串(语言)的各种运算及其性质;对于给定的一个文法,对于其某句型的推导、句型的推导过程、句子、所形成的语言等,以及推导所形成的语法树。最左推导,最右推导、规范推导等有关的概念及其产生过程;学会了什么是句型分析,什么是短语、直接短语,句柄,如何求 项目、项目分类、项目集;LR(0) 项目构造方法;LR(0) 项目集的构造;LR(0) 识别 活前缀的自动机构造;LR(0) 分析表的构造;LR(0) 文法,及其语句的分析过程;SLR (1 )分析表的构造;SLR(1) 文法及其语句的分析过程;LR (1 )项目的定义与构造;LR (1 )识别活前缀的自动机构造;LR (1 )文法及其语句的分析过程。 在进行词法分析和语法分析之后,需要进行语义分析。语义分析依据属性文法进行描述,属性文法的定义及属性文法的构造方法;基于 属性文法的处理方法,依赖图的定义及构造;抽象语法树的构造; 学会了中间表示的集中方式:图表示法及三地址代码

编译原理文法等价变换

匿名 (未验证) 提交于 2019-12-03 00:27:02
提到“编译原理”,大部分人的首要反应就是苦恼。确实,编译原理这一部分的内容在计算机学习中是比较难以理解的一部分。首次接触编译原理,我也感觉很复杂,难以理解。但是当看过几次之后,对于一些简单知识点的理解就有点眉目了。在这里就将有点眉目的知识写一下。 学习编译原理接触的第一个重要的概念就是――文法。那么什么是文法呢? 文法,语言中的每个句子可以用严格定义的规则来构造。通俗的讲就是:根据一些指定的规则,来确定编程语言的语法,从而实现编译器的功能。 那么文法是如何表示的呢? 文法是由非终结符(大写字母)和终结符(小写字母)以及“―>”组成的。给出几个例子就容易理解了。 A―> a、B―>dba、S―> Ab、adB―>d 通过上面的几个例子可以看出:非终结符A、B、S,一般是写在左边,而终结符a、dba、b,一般是写在右边的。当然习惯的写法是非终结符用S(Start)表示,写在左边,自然而然的小写的就在右边了,这样也便于我们记忆文法的表示方式。 话说,在1956年的春天,一个叫乔姆斯基(Chomsky)的人发明了上述文法,他觉得有些文法存在着相似的形式,于是他就给文法分了一下类。 首先有一个前提:设有一个组合G=(Vn,Vt,P,S)。其中Vn是非终结符的集合,Vt是终结符的集合,P是推导式的一个集合,S是开始符。就上面的例子来说,A、B、S是Vn,a、dba、b是Vt,整个的集合为P。

编译原理之文法和语言知识点汇总与Pl/0语言文法举例

匿名 (未验证) 提交于 2019-12-03 00:11:01
  一个程序设计语言是一个记号系统,如同自然语言一样,它的完整定义应包括语法和语义两个方面。所谓一个语言的语法是指一组规则,用它可以形成和产生一个合适的程序目前广泛使用的手段是上下文无关文法,即用上下文无关文法作为程序设计语言语法的描述工具。语法只是定义什么样的符号序列是合法的,与这些符号的含义毫无关系,比如对于一 Pasca A =B+C A =B+ B C B C A =B+C 字母表和符号串 :,典型的符号是字母、数字、各种标点和运算符等 :、 a中出现的符号的个数,记作 | α| 绌轰覆 :0ε| ε|=0 :αα0 univ university :αα0 sity university :αα/ ver university :βαβ≠αβα αα0 ( ) nvst αβαββα α=abβ=cdαβ=abcdβα=cdba α εα= αε = α A B : A B , A B AB={xylx∈ A 且 y∈ B} : , , ( ): ∑ {ε} L M L M L∪M L∪M={s|s∈ L 或 s∈ M} L M LM LM={st|s L 并且 t M} L L* L 0 L L+ L 1 G=(VT,VN,S,φ) VT VN VT∩VN =φ S φ BNF Backus-Normal Form → 琛ㄧず “ ” “ …… ” <……> | 琛ㄧず

虎书_褚论

匿名 (未验证) 提交于 2019-12-02 23:47:01
对于任何大型软件系统,如果设计者注意到该系统的基本抽象和接口,那么对这个系统的实现和理解就要容易的多。 下图,展示了一个典型的编译器的各个阶段,每个阶段由一至多个软件模块来实现。将编译器分解成这样多个阶段是为了能够重用他的各种构件。例如,要改变此编译器所生成的机器语言的目标机时,只要改变栈帧布局模块和指令选择模块。当要改变被编译的源语言的时候,只需要改变翻译模块之前的模块就可以了,该编译器也可以在抽象语法接口处与面向语言的语法编辑器相连。 抽象语法、IR树、汇编之类的接口是数据结构的形式,例如语法分析动作阶段建立抽象语法数据结构,并将它传递给语义分析阶段。另一些接口是抽象数据类型:翻译接口是一组可由语义分析阶段调用的函数;单词符号接口是函数形式,分析器通过调用它而得到输入程序中下一个单词符号。 阶段 描述 词法分析 将原文件分解成一个个独立的单词符号 语法分析 分析程序的短语结构 语义动作 建立每个短语对应的抽象语法树 语义分析 确定每个短语的含义,建立变量和其声明的关联。检查每个表达式的类型,翻译每个短语 栈帧布局 按机器要求的方式将变量、函数参数等分配于活跃记录 翻译 生成中间表示树(IR树)这是一种与任意特定程序设计语言和目标机体系结构无关的表示 规范化 提取表达式中的副作用,整理条件分支,方便下一阶段的处理 指令选择 将IR树节点组合成,与目标机指令动作相对应的块

Context-free grammar 与 BNF

我怕爱的太早我们不能终老 提交于 2019-12-01 15:49:51
道生一,一生二,二生三,三生万物 https://en.wikipedia.org/wiki/Context-free_grammar 名词解释 Context-free grammar :就是上下文无关文法,是一种形式文法(formal grammar)。 形式文法 是形式语言(formal language)的文法,由一组产生规则(production rules)组成,描述该形式语言中所有可能的字符串形式。形式文法一般可分为四大类:无限制文法(unrestricted grammars),上下文相关文法,上下文无关文法和正则文法(Regular grammar)。 Terminal symbols : 终结符,可以理解为基础符号,词法符号,是不可替代的,天然存在,不能通过文法规则生成! Nonterminal symbols : 非终结符,或者句法变量。 Production rules : grammar 是由终结符集和、非终结符集和和产生规则共同组成。产生规则定义了符号之间如何转换替代。规则的左侧是规则头,是可以被替代的符号;右侧是规则体,是具体的内容。 例如: <digit> ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' <integer> ::= ['-'] <digit> {<digit>

文法和语言总结与梳理

耗尽温柔 提交于 2019-11-30 15:08:57
1. 梳理第二章的内容,写一篇理解与总结。 通过这些天对第二章内容的学习,我理解了很多也学到了很多的知识,下面我将对我所学到的第二章的全部知识进行梳理和总结,其中包括 文法是什么、字母表的定义、符号串的定义及运算、文法及其类型、语法数内容、句型的推导、文法二义性、句型分析及相关 ,这几大部分。希望可以为我今后的学习之路夯实基础。 第二章——文法和语言   (1)文法是什么:     文法的定义:文法是对语言结构的定义与描述,即从形式上描述和规定语言结构,也称为语法。 可以说文法是有穷集合刻画无穷集合的一个工具。   (2)字母表的定义:     字母表的定义:是元素的非空有穷集合。其中的元素称为符号,因此字母表也称为符号集。     值得一提的是,c语言的字母表是由字母、数字、若干专用符号以及char、struct、if、do等等的保留字组成的。   ( 2 )符号串的定义及运算:      符号串的定义:由该字母表中的符号组成的有限符号序列。     字符串的连接:εx=xε=x     符号串的方幂:x 1 =ab,x 2 =abab,x 3 =ababab     A4:意为由集合A里四个字符串组成的所有符号串的集合。     A+:意为由集合A里一个或多个元素组成的所有符号串的集合。   (3 )文法及其类型 :     文法定义四元组:G=(V N ,V T ,P,Z)

编译原理作业4

我的未来我决定 提交于 2019-11-30 15:05:58
1. 梳理第二章的内容,写一篇理解与总结。 答:通过第二章的学习,我学习了文法的直观概念、符号和符号串、文法和语言的形式定义、文法的类型、上下文无关文法及其语法树、句型的分析等重点知识。 总结: 1、语言是一个记号系统,完整的定义包括语法和语义两方面。 2、语法是一组说明语言的规则,文法是用来阐明这些语法规则的一个重要形式工具。 3、语义包括静态语义和动态语义,阐明语义要比语法困难的多。 2.尝试写出PL/0 语言的文法。(或者你认为比较好的语言规则) 整数n n :: = 1 | 2 | ..... | 9 | 0 标识符i i :: = <字母> | {<字母> | <数字 >} 表达式e ::=[+|-]<项>{<加减运算符><项>} 条件语句 ::=if<条件>then<语句> 赋值语句 ::=<id>:=<表达式> 复合语句 ::=begin<语句>{;<语句>}end 函数 ::= <类型说明><函数名><复合语句> 来源: https://www.cnblogs.com/cnw834575008/p/11583461.html

第四次作业

。_饼干妹妹 提交于 2019-11-30 15:05:58
1. 梳理第二章的内容,写一篇理解与总结。 ( 1)文法是对语言结构定义与描述,即从形式上描述和规定语言结构,也称语法 ( 2)语法规则通过一组规则(产生式),来描述句子的语法结构 ( 3) 处理文法的语法分析器大体上可以分为三种类型:通用的,自顶向下的和自顶向上的。 ( 4) 文法:一种用于描述程序设计语言语法的表示方法 ——“上下文无关文法”,简称“文法”。 ( 5).一个上下文无关文法(文法)有四个元素组成: 文法 G可以抽象成四元组的形式:G=(VN,VT,P,S) 其中 VN表示非终结符集,VT表示终结符集,P表示产生式集,S表示开始符号。 ①  一个终结符号集合,也称为词法单元。是组成串的基本符号。 ②  一个非终结符号集合,也称为语法变量。是表示串的集合的语法变量。 ③  一个开始符号。这个符号表示的串集合就是这个方法生成的语言。 ④  一个产生式集合。描述了将终结符号和非终结符号组合成串的方法。有三个元素组 成: 1) 一个被称为产生式头或左部的非终结符号这个产生式定义了这个头所代表的串集合的一部分。 2) 符号 →。 3) 一个由零个或多个终结符号或非终结符号组成的右部或产生式体。右部中的成分描述了左部的非终结符号所对应的串的某种构造方法。 ( 6) 文法 G描述的语言用L(G)表示L(G)={w|w∈VT*且S=*>w} 其中S是文法G的开始符号

第四次作业

一曲冷凌霜 提交于 2019-11-30 15:05:07
梳理第二章的内容,写一篇理解与总结。 第二章为文法与语言,它介绍了程序设计语言的文法和语言构成。本章重点介绍了语言的语法结构的形式描述、语法树以及文法的二义性,主要内容:文法的直观概念、符号符号串、文法和语言的形式定义、问答的类型、上下文无关文法及其语法树、句型分析以及文法的实际应用。 总结:文法是一个四元组 G=(VN,VT,P,S),每个语言都有文法,简称语法,每个语言都有语法树,至少有两个语法树的语法,成为文法的二义性。 2、尝试写出 PL/0 语言的文法。(或者你认为比较好的语言规则) 整数 n:::= 1|2|3|..... 标识符 i:::=<标识符><字母>|<标识符>|<标识符><数字> 表达式 e:::=[+|-]<e> 条件语句 :::=<表达式><关系运算符><表达式>|odd<表达式> 赋值语句 :::=<id>:=<表达式> 复合语句 :::=begin<语句>{;<语句>}end 函数 :::=[<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句> 程序 :::=<分程序> 来源: https://www.cnblogs.com/nazhabanma/p/11600201.html

编译原理第四次作业

淺唱寂寞╮ 提交于 2019-11-30 15:04:54
1. 梳理第二章的内容,写一篇理解与总结 在第二章学习主要学习了语法规则,以下为总结的本章的一些词语解释 最左推导:如果在推导的任何一步@=>B,其中@、B是句型,都是对@中的最左非终结符进行替换,则称这种推导为最左推导。 最右推导:与最左推导相反。 语法树:推导的图形表示,又称推导树。 二义性:如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义。含有二义性句子的文法是二义性的文法。有些语言,根本就不存在无二义性的文法,这样的语言称为二义性的语言。 短语:一棵子树的所有叶结点自左至右排列起来,形成此句型相对于该子树根的短语。 直接短语:分析树中只有父子两代的子树的所有叶结点自左至右排列起来,形成此句型相对于该子树根的直接短语。 句柄:分析树中最左边的那棵只有父子两代的子树的所有叶结点自左至右排列起来,就是该句型的句柄。 规则:形如α→β或α::=β的(α,β)有序对,其中α称为规则的左部,β称作规则的右部。这里使用的符号→(::=)读作“定义为”。例如A→a读作“A定义为a”。也把它说成是一条关于A的规则(产生式)。 句型:对于文法G=(V T ,V N ,S,φ),如果S=>@,则称@是当前文法的一个句型。 句子:仅含有终结符号的句型是文法的一个句子。 语言:文法G产生的所有句子组成的集合是文法G所定义的语言。 0型文法:0型文法(PSG): α∈(V N ∪V T