当前位置:首页 » 编程软件 » 编译原理函数定义文法

编译原理函数定义文法

发布时间: 2024-09-13 07:22:57

A. 编译原理问题:求解

E是文法开头。ε代表终结符号(推理中代表终点或结果,程序语言中代表常量等)。E T 这些大写字母一般代表非终结符号(这些代表中间过程,非结果。程序中代表函数等等)。开始是E。因为有个G(E)。E就是文法开始符号。推导就有E开始,它也是一个非终结符(代表函数、或者一个推导过程,类似于程序中的main(c++)、winmain(vc++)、dllmain(dll)等主函数)。

1算术表达式文法:这个文法是一个递归文法。计算机进行逻辑推导时会走很多弯路(类似于遍历一颗树的过程)。为了不让计算机走弯路(提高效率的目的),可以变换为第二种文法。这种文法消除了递归(消除了歧义,类似于后缀表达式),使计算机可以一条直线走到底儿推导出结果。

我也很久没看编译原理了。 呵呵

B. 编译原理中的语法和文法一样吗

编译原理中的语法和文法是不一样的,但却融会贯通。
在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法。
文法分成四种类型,即0型、1型、2型和3型。这几类文法的差别在于对产生式施加不同的限制。
形式语言,这种理论对计算机科学有着深刻的影响,特别是对程序设计语言的设计、编译方法和计算复杂性等方面更有重大的作用。
多数程序设计语言的单词的语法都能用正规文法或3型文法(3型文法G=(VN,VT,P,S)的P中的规则有两种形式:一种是前面定义的形式,即:A→aB或A→a其中A,B∈VN ,a∈VT*,另一种形式是:A→Ba或A→a,前者称为右线性文法,后者称为左线性文法。正规文法所描述的是VT*上的正规集)来描述。
四个文法类的定义是逐渐增加限制的,因此每一种正规文法都是上下文无关的,每一种上下文无关文法都是上下文有关的,而每一种上下文有关文法都是0型文法。称0型文法产生的语言为0型语言。上下文有关文法、上下文无关文法和正规文法产生的语言分别称为上下文有关语言、上下文无关语言和正规语言。

C. 【编译原理】构造下述文法G[S]的确定有限自动机,并给出该文法的语言的正规表达式 S->Aa|ε A->Aa|Sb|a

通过联立方程组求正规表达式:
A = Aa|Sb|a = Aa|(Aa|ε)b|a= Aa+(Aa+ε)b+a=Aa+(Aab+b)+a=Aa+Aab+b+a=A(a+ab)+(b+a)
根据方程X=Xt+r 必有X=t*r解的论断,可得A=(a+ab)*(b+a),进而可求得:
S = Aa|ε = Aa+ε = Aa = (a+ab)*(b+a)a = (a|ab)*(b|a)a
即文法的正规表达式为: (a|ab)*(b|a)a。
注意:以上求解的过程中“|”和“+”是等价的,都表示“或”的意思,它们的相互替换是为了描述的方便。

D. 编译原理 LR0文法的判定

设G1、G2是两个文法,若L(G1)=L(G2) ,则称G1与G2等价,记作G1≡G2。

即:文法的等价性是指他们所定义的语言是一样的。

文法的化简是指消除如下无用产生式:

⒈ 删除 A->A 形式的产生式(自定己);

⒉ 删除不能从其推导出终结符串的产生式(不终结);

⒊ 删除在推导中永不使用的产生式(不可用)。

E. 编译原理全部的名词解释

书上有别那么懒!.
编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成
解释程序:把某种语言的源程序转换成等价的另一种语言程序——目标语言程序,然后再执行目标程序.解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句.
编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序(机器语言程序或汇编语言程序).
解释程序和编译程序的根本区别:是否生成目标代码
句子的二义性(这里的二义性是指语法结构上的.):文法G[S]的一个句子如果能找到两种不同的最左推导(或最右推导),或者存在两棵不同的语法树,则称这个句子是二义性的.
文法的二义性:一个文法如果包含二义性的句子,则这个文法是二义文法,否则是无二义文法.
LL(1)的含义:(LL(1)文法是无二义的; LL(1)文法不含左递归)
第1个L:从左到右扫描输入串 第2个L:生成的是最左推导
1 :向右看1个输入符号便可决定选择哪个产生式
某些非LL(1)文法到LL(1)文法的等价变换: 1. 提取公因子 2. 消除左递归
文法符号的属性:单词的含义,即与文法符号相关的一些信息.如,类型、值、存储地址等.
一个属性文法(attribute grammar)是一个三元组A=(G, V, F)
G:上下文无关文法.
V:属性的有穷集.每个属性与文法的一个终结符或非终结符相连.属性与变量一样,可以进行计算和传递.
F:关于属性的断言或谓词(一组属性的计算规则)的有穷集.断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的属性.
综合属性:若产生式左部的单非终结符A的属性值由右部各非终结符的属性值决定,则A的属性称为综合属
继承属性:若产生式右部符号B的属性值是根据左部非终结符的属性值或者右部其它符号的属性值决定的,则B的属性为继承属性.
(1)非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性.
(2) 终结符只有综合属性,没有继承属性,它们由词法程序提供.
在计算时: 综合属性沿属性语法树向上传递;继承属性沿属性语法树向下传递.
语法制导翻译:是指在语法分析过程中,完成附加在所使用的产生式上的语义规则描述的动作.
语法制导翻译实现:对单词符号串进行语法分析,构造语法分析树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结点处按语义规则进行计算.
中间代码(中间语言)
1、是复杂性介于源程序语言和机器语言的一种表示形式.
2、一般,快速编译程序直接生成目标代码.
3、为了使编译程序结构在逻辑上更为简单明确,常采用中间代码,这样可以将与机器相关的某些实现细节置于代码生成阶段仔细处理,并且可以在中间代码一级进行优化工作,使得代码优化比较容易实现.
何谓中间代码:源程序的一种内部表示,不依赖目标机的结构,易于代码的机械生成.
为何要转换成中间代码:(1)逻辑结构清楚;利于不同目标机上实现同一种语言.
(2)便于移植,便于修改,便于进行与机器无关的优化.
中间代码的几种形式:逆波兰记号 ,三元式和树形表示 ,四元式
符号表的一般形式:一张符号表的的组成包括两项,即名字栏和信息栏.
信息栏包含许多子栏和标志位,用来记录相应名字和种种不同属性,名字栏也称主栏.主栏的内容称为关键字(key word).
符号表的功能:(1)收集符号属性 (2) 上下文语义的合法性检查的依据: 检查标识符属性在上下文中的一致性和合法性.(3)作为目标代码生成阶段地址分配的依据
符号的主要属性及作用:
1. 符号名 2. 符号的类型 (整型、实型、字符串型等))3. 符号的存储类别(公共、私有)
4. 符号的作用域及可视性 (全局、局部) 5. 符号变量的存储分配信息 (静态存储区、动态存储区)
存储分配方案策略:静态存储分配;动态存储分配:栈式、 堆式.
静态存储分配
1、基本策略
在编译时就安排好目标程序运行时的全部数据空间,并能确定每个数据项的单元地址.
2、适用的分配对象:子程序的目标代码段;全局数据目标(全局变量)
3、静态存储分配的要求:不允许递归调用,不含有可变数组.
FORTRAN程序是段结构,不允许递归,数据名大小、性质固定. 是典型的静态分配
动态存储分配
1、如果一个程序设计语言允许递归过程、可变数组或允许用户自由申请和释放空间,那么,就需要采用动态存储管理技术.
2、两种动态存储分配方式:栈式,堆式
栈式动态存储分配
分配策略:将整个程序的数据空间设计为一个栈.
【例】在具有递归结构的语言程序中,每当调用一个过程时,它所需的数据空间就分配在栈顶,每当过程工作结束时就释放这部分空间.
过程所需的数据空间包括两部分
一部分是生存期在本过程这次活动中的数据对象.如局部变量、参数单元、临时变量等;
另一部分则是用以管理过程活动的记录信息(连接数据).
活动记录(AR)
一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区 (块)叫做一个活动记录.
构成
1、临时工作单元;2、局部变量;3、机器状态信息;4、存取链;
5、控制链;6、实参;7、返回地址
什么是代码优化
所谓优化,就是对代码进行等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行速度加快或占用存储空间减少.
优化原则:等价原则:经过优化后不应改变程序运行的结果.
有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小.
合算原则:以尽可能低的代价取得较好的优化效果.
常见的优化技术
(1) 删除多余运算(删除公共子表达式) (2) 代码外提 +删除归纳变量+ (3)强度削弱; (4)变换循环控制条件 (5)合并已知量与复写传播 (6)删除无用赋值
基本块定义
程序中只有一个入口和一个出口的一段顺序执行的语句序列,称为程序的一个基本块.
给我分数啊.

F. 编译原理中 文法 文法G定义为四元组(Vn ,Vt,P,S)这4个是什么意思 另外 终结符和非终结符是什么意思

文法G是一个四元式(Vt,Vn,S,P)
其中Vt是一个非空有限集,它的每个元素称为终结符号
Vn是一个非空有限集,它的每个元素称为非终结符号(Vt和Vn的交集为空)
S是一个非终结符号,称为开始符号
P是一个产生式集合(有限),每个产生式的形式是P-->a

开始S必须在某个产生式的左部出现一次

终结符指组成语言的基本符号(如基本字、标识符、常数、算符、界符)
非终结符号(也称语法变量)表示一定符号串的集合。

你看到小写字母一般是终结符,大写字母肯定是非终结符

不明白可以联系。

G. 编译原理的文法

“文法是以有穷的集合刻画无穷的集合的一个工具”,有穷的集合应该是已经出现的,人们普遍接受的词、词组或句子,无穷的集合就是有穷的集合的词、词组或句子,创造新的集合过程和结果,有待进一步认识接受。
我们的文法规定内涵是已经明确定义的和正在定义(声明)的内容。反映到计算机语言程序中就是编程时已经定义的和正在定义(声明)的字符或字符串。文法可以以表的形式,或词典形式存放。

H. 编译原理-文法定义

文法定义公式如下:

Chomsky 文法分类将文法分为四种,0型文法( PSG )、1型文法( CSG )、2型文法( CFG )和3型文法( RG )。

又被称为无限制文法(Unrestricted Grammar), 或者短语结构文法(Phrase Structure Grammar)
定义: 对于产生式 α→β , α 至少包含一个非终结符。

为什么要叫无限制文法,明明它要求产生式的左部必须包含一个非终结符。

又被称为上下文有关文法(Context-Sensitive Grammar)
定义:对于产生式 α→β , |α| <= |β| , 仅仅 S→ε 除外

为什么叫做上下文有关文法?

一般情况下,这种产生式的形式为 α1Aα2→α1βα2

又被称为上下文无关文法(Context-Free Grammar)
定义:对任一产生式 α→β ,都有 α∈VN,β∈(VN∪VT)*

为什么叫上下文无关文法?

又被称为正则文法(Regular Grammar,RG),分为右线性(Right Linear)文法和左线性(Left Linear)文法。

定义: 对任一产生式 α→β ,都有 α∈VN,β最多两个字符元素,如果有二个字符必须是(终结符+非终结符)的格式,如果是一个字符,那么必须是终结符。

根据产生式右部非终结符位置不同,分为右线性文法和左线性文法。

可以看出,不同文法就是对产生式进行逐层的限制,所以各个文法是包含关系,即0型文法包含1型文法;1型文法又包含2型文法;2型文法最后包含3型文法。

I. 什么是文法(编译原理)

【定义】

文法G定义为四元组(VN,VT,P,S)

其中 VN   :非终结符号(即语法变量)集

        VT   : 终结符号集

                   VN∩VT =Φ,令V= VN∪VT,V称为文法G的字母表或字汇表。

        P  :产生式(α→β)集

        S :开始符号,且S∈VN ,S至少要在一条规则的左部出现。

【约定】

一般地,文法G的 四元组 不用全部给出 ,而只将产生式写出。

约定:

    (1)第一条产生式的左部是开始符号

    (2)用尖括号括起来的(或 大写字母 )是非终结符号

    (3)不用尖括号括起来(或 小写字母 )是终结符号

    (4)还有一种习惯写法,即 G[S] ,其中 S 是 开始符号 。

【举例】

    例: G=(VN,VT,P,S)

           其中  VN={S},

           VT ={0,1},

           P={S→0S1,S→01}

           S是开始符号

热点内容
linux分割行 发布:2024-11-24 22:11:02 浏览:577
获取ftp文件 发布:2024-11-24 21:54:20 浏览:521
资源平滑算法 发布:2024-11-24 21:54:18 浏览:58
vs和vc编译器哪个好使 发布:2024-11-24 21:54:07 浏览:805
爱课程适用于什么安卓系统 发布:2024-11-24 21:54:02 浏览:39
51单片机编译 发布:2024-11-24 21:50:05 浏览:367
android常用的工具类 发布:2024-11-24 21:42:25 浏览:49
用户管理源码 发布:2024-11-24 21:29:36 浏览:678
监控怎么配置路由器 发布:2024-11-24 21:29:27 浏览:456
小型编译器的实现 发布:2024-11-24 21:27:48 浏览:1000