当前位置:首页 » 编程软件 » m1编译器

m1编译器

发布时间: 2022-08-17 11:50:49

① MDK的简介

MDK 即RealView MDK 或MDK-ARM(Microcontroller Development kit),是 ARM 公司收购Keil公司以后,基于uVision界面推出的针对ARM7、ARM9、Cortex-M0、Cortex-M1、Cortex-M2、Cortex-M3、Cortex-R4等ARM处理器的嵌入式软件开发工具。MDK-ARM 集成了业内最领先的技术,包括 uVision4 集成开发环境与 RealView 编译器RVCT。支持 ARM7、ARM9 和最新的Cortex-M3/M1/M0 核处理器,自动配置启动代码,集成 Flash 烧写模块,强大的 Simulation 设备模拟,性能分析等功能,与 ARM 之前的工具包 ADS 等相比,RealView 编译器的最新版本可将性能改善超过 20%。
Keil公司开发的ARM开发工具MDK,是用来开发基于ARM核的系列微控制器的嵌入式应用程序。它适合不同层次的开发者使用,包括专业的应用程序开发工程师和嵌入式软件开发的入门者。MDK包含了工业标准的Keil C编译器、宏汇编器、调试器、实时内核等组件,支持所有基于ARM的设备,能帮助工程师按照计划完成项目。

② 用Multisim设计两片3线-8线译码器接成4线-16线译码器

将其中一个E1端接一个非门在于另一个的E1端通过一个与门接在一起作为一个输入端即变成了四线的其中之一。

设两个3-8线译码器分别为译码器Y1和Y.Y1控制端分别为C1,B1,A1,Y控制端分别为C,B,A。

M3 M2 M1 M0

C1 B1 A1 C B A

0 0 0 0 0 0

0 0 0 0 0 1

0 0 1 0 0 0

O O 1 O O 1

O O 1 1 1 1

可以发现C1和B1一直是零,所以需要把这两个控制端接地置0。

四根线分别为M3,M2, M1,M0,分别对应 A1 C B A。

(2)m1编译器扩展阅读:

译码器的种类很多,但它们的工作原理和分析设计方法大同小异,其中二进制译码器、二-十进制译码器和显示译码器是三种最典型,使用十分广泛的译码电路。

二进制码译码器,也称最小项译码器,N中取一译码器,最小项译码器一般是将二进制码译为十进制码;

代码转换译码器,是从一种编码转换为另一种编码;显示译码器,一般是将一种编码译成十进制码或特定的编码,并通过显示器件将译码器的状态显示出来。

③ C++继承的构造顺序

1.构造函数
先看下面的类定义
class
B1 class B2
{ {
public: public:
int
i; int i;
B1() { i = 0;
} B2() { i = 0; }
virtual void f()
{} virtual void f() {}
}
; } ;

class
M1 class M2
{ {
public: public:
int
i; int i;
M1() { i = 0;
} M2() { i = 0; }
virtual void mf()
{} virtual void mf() {}
}
; };

class C : public B1, public B2
{
public:
virtual void f() {}
M1 m1;
M2 m2;
};

(1)编译器会不会为C生成默认构造(default ctor)
编译器只在需要时才会为一个类生成def
ctor。“需要时”指:
a.一个类有虚函数
b.一个类有虚基类
c.一个类的基类有def ctor
d.一个类的成员类有def ctor
在这里,class C符合c,d两个条件,编译器会为它生成def
ctor.

(2)默认构造的内容
编译器生成的def ctor是这样的
C::C()
{
B1::B1()
B2::B2()
设定虚表指针指向C的虚表
m1::M1()
m2::M2()
}
a.按声明顺序构造基类
b.设定虚表指针
c.按声明顺序构造成员类

(3)对自定义构造函数的改造
对于B1,B2,M1,M2,已有构造函数,但编译器会对其改造,加入一些代码,完成必要的初始化工作。改造后的ctor如下:(以B1为例)
B1::B1()
{
设定虚表指针指向B1的虚表
i = 0;
}
a.设定虚表指针
b.如果用户写有代码(如i=0),则执行这些代码

(4)综合(2),(3),构造函数完整代码如下
T::T()
{
按声明顺序构造基类
设定虚表指针
按声明顺序构造成员类
如果用户写有代码,则执行这些代码
}
在用户代码执行前,基类与成员类已构造完毕,虚指针已设定。

所以C的构造顺序是:B1-〉B2-〉虚指针设定-〉m1-〉m2->C自己的代码(如果有的话)
由(3)可知,每个类的ctor中,都会暂时将虚指针指向自己的虚表。调用B1::B1时,虚指针指向B1的虚表,然后在C::C中,虚指针被重新设定为C的虚表。
在继承体系中,构造是由上而下的,B1或B2构造时,C还未构造。C构造时,B1和B2已构造完成。

所以在继承体系中,一个类的构造函数执行时,该类的所有基类已构造完毕,虚指针已设定,所有成员类也已构造完毕。但该类的所有子类均未构造完成。

2.析构函数
(1)编译器会不会为C生成析构函数(dtor)
编译器只在需要时才会为一个类生成dtor。“需要时”指:
a.类的基类有析构
b.类的成员类有析构
与构造不同,少了两点,因为在一个类析构时,这是一个破坏操作(destory),既然类以已经没用了,何必再把虚指针设一下呢。

(2)析构的内容
编译器生成的析构是这样的
C::~C()
{
m2::M2()
m1::M1()
B2::B2()
B1::B1()
}
a.按声明顺序相反的顺序析构成员类
b.按声明顺序相反的顺序析构基类
这里的相反顺序是C++标准规定的要求,不同编译器都应做到,否则不符合标准(实际上编译器或多或少都有不符标准的地方,当然不是指这里所说的顺序问题)

(3)完整的析构的调用顺序
对于已有析构函数的类,编译器会对其改造,加入一些代码,完成必要的工作。改造后的dtor如下:
T::~T()
{
设定虚表指针指向T的虚表
执行用户代码
按声明顺序相反的顺序析构成员类
按声明顺序相反的顺序析构基类
}
这是完整的析构的调用顺序
在用户代码执行前,虚指针已重新设定,以便用户代码能正确执行。然后再析构成员类和基类。

所以,如果上面例子中的五个类都有析构函数的话,调用顺序是:
虚指针设定-〉C自己的代码->m2-〉m1-〉B2-〉B1
每个类的dtor中,都会暂时将虚指针指向自己的虚表。调用C::~C时,虚指针指向C的虚表,然后在B1::~B1中,虚指针被重新设定为B1的虚表。

可见,在继承体系中,析构是由下而上的,B1或B2析构时,C已被析构。C析构时,B1和B2还未被析构。
所以在继承体系中,一个类的析构函数执行时,该类的所有基类还未被析构,所有成员类也未被析构。但该类的所有子类均已析构完成。

3.虚函数
在构造或析构中调用虚函数,会怎样.如:
B1::B1()
{
f();
}
调用的是B1::f()还是C::f()
答案是B1::f()
每个类的ctor中,都会暂时将虚指针指向自己的虚表。调用B1::B1时,虚指针指向B1的虚表
所以是B1::f()
如果在C的构造函数中调用f(),那就调用C::f()

④ 关于计算机计数系统的概念

1. 计算机系统的构成:

a. 由软硬件两大部分组成;

b. 硬件:是指实体部分,通常指主机(MPU、内存及其支持部件)、接口、外设这些看得见摸得着的东西;

c. 软件:是指程序和相关附件(程序的产品说明、使用说明等),软件不仅能充分调动硬件的功能而且能局部模仿人类思维,因此软件也是评价系统好坏的重要标志;

d. 软件通常分为两大类:

i. 系统软件:底层软件,和相应的硬件紧密相连,通用性较差,基于硬件平台,主要有这几类:

*1. 标准程序库:例如开机启动程序BIOS;

*2. 语言处理程序:特指汇编以及高级语言编译器;

*3. 操作系统:有批处理、分时、实时等类型;

*4. 服务程序:例如连接、诊断、调试程序等;

*5. 数据库管理程序:基于操作系统,又低于应用程序;

*6. 网络通信程序等;

ii. 应用软件:位于最高层次,基于系统软件,比如游戏软件、事务管理软件、文本编辑器等;

举例:比如游戏里的存档功能就是调用了操作系统提供的文件写入功能,因此游戏软件是基于操作系统的;

2. 计算机系统的层次结构:

a. 三级层次结构:

第三级(最高级) 虚拟机M3(高级语言机器)

实质是编译器,将高级语言编译成汇编语言再传给M2执行,

从外部看上去就是一台可以直接运行高级语言的机器,将M2的功能隐藏了

第二级 虚拟机M2(汇编语言机器)

实质也是编译器,将汇编语言编译成机器语言再传给M1执行,

从外部看上去就是一台可以直接运行汇编语言的机器,将M1的功能隐藏了

第一级(最底层) 实际机器M1(机器语言机器)

可以直接运行机器语言程序

b. 严格来讲以上虚拟机都属于翻译程序,通常翻译程序可以分为两类:

i. 编译型:就像a.中的结构,直接将源程序最终全部翻译成可直接在M1上运行的机器语言,程序一次性执行;

ii. 解释型:直接运行源程序,而且是一条一条执行源程序中的语句,只不过是每执行一条就将其翻译成可直接在M1上运行的机器语言,即翻译一次执行一次,即使下一次重复执行该语句也必须得走该流程,这种层次结构就只有两层;

注:该过程同样也是三层结构的,相当于M3每执行一次高级语言就将其先翻译成汇编语言,再翻译成机器语言最后再执行,这种模式更加贴近人的思维,就好像真的在执行高级语言一样,并且是“一条一条执行高级语言”的;

c. 四级层次结构:就是讲第一层再向下分解出一个微程序机器,又因为实际机器和微程序机器都是实际机器,因此将第一层的实际机器改称为传统机器以示区别

第一层 传统机器M1

还是机器语言机器

将每一条机器指令按照不同的部分分解成更小的原子操作,即按照“指令类型+操作数1+操作数2”的形式进行分解,

分解成更小的一组微指令,再将不同类型的微指令传给相应的M0直接运行,例如一条机器指令(为了方便,用汇编

语言描述)”MOV AL,X;“,将其分解成更小的三条微指令MOV、AL、X,分别为移动指令、寻找寄存器存储单元的寻址

指令和寻找内存存储单元的寻址指令,然后将这三个微指令交由各自相应的微程序机器运行(分别交由移动控制单元、

寄存器寻址控制单元和内存寻址控制单元来运行),这样就将实际机器M1分解成了若干更小的微程序机器M0,这更加

体现了分工合作的高效性;

第零层 微程序机器M0

微指令系统

可以直接运行各自的微指令,因此由机器指令分解而来的各条微指令可以看做更小的微程序

d. 五级层次结构:即在M1和M2(即机器机和汇编机之间)还应有一层虚拟机,即操作系统,因为它具有控制并管理计算机全部硬件资源的作用,因此上层虚拟机的很多实现都必须有操作系统支持,比如malloc需要有操作系统的内存映射来支持,但从高级语言角度来看malloc没有任何意义,操作系统不是翻译程序,而是上层程序的运行环境;

3. 从层次结构来划分软硬件:

a. 以操作系统为分界线,上层虚拟机是软件的主要研究对象,而下层的传统机和微程序机是硬件的主要研究对象,组成原理主要的研究对象就是传统机和微程序机;

b. 软硬件界线并非一成不变,随着超大规模集成电路的发展出现了固件,即将软件永久存于只读存储器中;

例如,现在已经实现部分操作系统的固化(固态C盘),这样就省去了开机时将操作系统加载进内存的时间,MPU可以直接读操作系统中的内容,相当于一个专门存放操作系统的永久性内存;

4. 计算机系统结构和计算机组成的区别:

a. 计算机系统结构:

i. 即计算机系统的属性,比如指令系统、数据类型、存储技术等;

ii. 是一种概念性的结构与功能;

iii. 只在程序员层面上可见,由于计算机系统具有多级层次结构,因此站在不同层次上的程序员所看到的计算机系统结构是不同的;

iv. 例如在C程序员看来完全相同的两种系统结构,但在汇编程序员看来可能完全不一样;

b. 计算机组成:

i. 是对于程序员来说是透明的(隐藏的)实现系统结构的硬件细节;

ii. 例如指令系统是一种结构问题,而如何用硬件实现(用什么电路、用那些器件进行组合)具体的指令系统就是计算机组成问题了;

c. 最为典型的例子:

厂商一般会生产同一系列不同型号的各种计算机,不同型号之间性能以及价格等会有较大的差别,但是这些型号的计算机上面开发的软件可以相互兼容;

其中同一系列就是指这些计算机的系统结构都是相同的,因此对于程序员来说其看到的系统属性都是相同的,因此开发的软件相互都可以兼容(从而使用户的软件投资不浪费),而不同型号就是指这些计算机组成互不相同,但是这些不同的组成都实现了相同的体系结构,不同组成使得其运行速度有较大差异,一些方面的性能可能不同,这样可以针对不同性能需求的用户提供同一种体系结构的产品;
目录
(一)计算机发展历程
(二)计算机系统层次结构
1. 计算机系统的基本组成
2. 计算机硬件的基本组成
3. 计算机硬件和软件的关系
4. 计算机的工作过程
(三)计算机性能指标
(一)计算机发展历程
1.世界上第一台电子数字计算机是1946年问世的ENIC(Electronic Numerical Integrator And Computer)。

2.根据计算机采用的电子器件可分为四类:
(1)第一代——电子管计算机
(2)第二代——晶体管计算机
(3)第三代——小、中规模集成电路(SSI,MSI)计算机
(4)第四代——大、超大规模集成电路(LSI,VLSI)计算机

(二)计算机系统层次结构
1. 计算机系统的基本组成
1.1 一个完整的计算机系统包括硬件系统和软件系统。

1.2 早期的冯·诺依曼机特点:

计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备5大部件组成。
指令和数据以同等地位存放于存储器内,并可按地址寻访。
指令和数据均用二进制数表示。
指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作码在存储器中的位置。
指令在存储器内按顺序存放。通常,指令是顺序执行的,在特定条件下,可根据运算结果或根据设定的条件改变执行顺序。
机器以运算器为中心,输入输出设备与存储器间的数据传送通过运算器完成。
注:现代计算机以存储器为中心。

2. 计算机硬件的基本组成
2.1 计算机硬件的组成及作用:

运算器(ALU):完成算术运算和逻辑运算,并将运算的中间结果暂存在运算器内。
存储器:存放数据和程序。
控制器:控制、指挥程序和数据的输入、运行以及处理运算结果。
输入设备:将人们熟悉的信息形式转换为机器能识别的信息形式,常见的有键盘、鼠标等。
输出设备:将机器运行结果转换为人们熟悉的信息形式,如打印机输出、显示器输出等。
2.2 计算机软件的组成:

系统软件:标准程序库、语言处理程序、操作系统、服务性程序、数据库管理系统、计算机网络软件等。
应用软件(应用程序):科学计算程序、数据处理程序、过程控制程序、事务管理程序、各种APP等。
2.3 说明

中央处理器(CPU):运算器和控制器。
I/O设备:输入设备和输出设备。
地址寄存器(MAR):存放欲访问的存储单元地址。
数据寄存器(MDR):暂存要从存储器中读或者写的信息。
运算器:包含若干通用寄存器,如累计器(ACC)、乘商寄存器(MO)、操作数寄存器(X)、变址寄存器(IX)、基址寄存器(BR)、程序状态寄存器(PSW)等。
控制器由程序计数器(PC)、指令寄存器(IR)、控制单元(CU)组成。
3. 计算机硬件和软件的关系
硬件和软件是一个完整的计算机系统互相依存的两大部分,它们的关系主要体现在以下几个方面。

硬件和软件互相依存:硬件是软件赖以工作的物质基础,软件的正常工作是硬件发挥作用的唯一途径。计算机系统必须要配备完善的软件系统才能正常工作,且充分发挥其硬件的各种功能。
硬件和软件无严格界线: 随着计算机技术的发展,在许多情况下,计算机的某些功能既可以由硬件实现,也可以由软件来实现。因此,硬件与软件在一定意义上说没有绝对严格的界面。
硬件和软件协同发展:计算机软件随硬件技术的迅速发展而发展,而软件的不断发展与完善又促进硬件的更新,两者密切地交织发展,缺一不可。
4. 计算机的工作过程
计算机的工作过程可分为以下几个过程:

把程序和数据装入到主存储器中。
从程序的起始地址运行程序。
用程序的首地址从存储器中取出第一条指令,经过译码、执行步骤等控制计算机各功能部件协同运行,完成这条指令功能,并计算下一条指令的地址。
用新得到的指令地址继续读出第二条指令并执行,直到程序结束为止;每一条指令都是在取指、译码和执行的循环过程中完成的。
(三)计算机性能指标
机器字长:计算机进行一次整数运算(即定点整数运算)所能处理的二进制数据的位数。数的表示范围越大,计算精度越高。

数据通路带宽:数据总线一次所能并行传送信息的位数。

主存容量:主存储器所能存储信息的最大容量,用字节或字数×字长表示。MAR的位数反映了存储单元的个数。
如:MAR为16位,则有216 个存储单元(即64K内存,1K=1024),若MDR为32位,表示存储容量为64K×32位。

运算速度:

(1)吞吐量和响应时间

吞吐量:系统在单位时间内处理请求的数量,主要取决于主存的存取周期。
响应时间:用户向计算机发送一个请求,到系统对该请求做出响应并获得它所需要 的 结果的等待时间。
(2)主频和CPU时钟周期

主频(CPU时钟频率):机器内部主时钟的频率,即CPU时钟周期的倒数,常以MHz为单位,1MHz表示每秒1次。
CPU时钟周期:通常为节拍脉冲或T周期,即主频的倒数,是CPU中最小的时间单位。
(3)CPI:执行一条指令所需要的时钟周期数。

(4)CUP执行时间:运行一个程序所花费的时间。
   CUP执行时间 = CPU时钟周期数 / 主频 = (指令条数 × CPI)/ 主频

(5)MIPS、MFLOPS、GFLOPS和TFLOPS

MIPS:每秒执行多少百万条指令。
MIPS = 指令条数 / (执行时间 × 106)= 主频 / CPI

MFLOPS:每秒执行多少百万次浮点运算。

GFLOPS:每秒执行多少十亿次浮点运算。

TFLOPS:每秒执行多少万亿次浮点运算。

⑤ access创建名称为m1的宏功能为tEmployee的表

access可以直接在宏创建名称为m1的宏功能为tEmployee的表。
宏)是一种批量处理的称谓。计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。创建宏时,意味着要录制鼠标点击操作和按键操作。创建宏后,可进行编辑,以对其工作方式进行细微更改。
1、打开access,新建一个宏,点击上面菜单栏的“创建”,点击“宏”。
2、然后在弹出的界面选择要用的宏操作,再设置好宏的相关参数。
3、最后点击保存,在弹出的窗口中设置好宏名称,点击确定即可。

⑥ 编译原理题目

习题一、单项选择题
1、将编译程序分成若干个“遍”是为了 。
a.提高程序的执行效率
b.使程序的结构更加清晰
c.利用有限的机器内存并提高机器的执行效率
d.利用有限的机器内存但降低了机器的执行效率
2、构造编译程序应掌握 。
a.源程序 b.目标语言
c.编译方法 d.以上三项都是
3、变量应当 。
a.持有左值 b.持有右值
c.既持有左值又持有右值 d.既不持有左值也不持有右值
4、编译程序绝大多数时间花在 上。
a.出错处理 b.词法分析
c.目标代码生成 d.管理表格
5、 不可能是目标代码。
a.汇编指令代码 b.可重定位指令代码
c.绝对指令代码 d.中间代码
6、使用 可以定义一个程序的意义。
a.语义规则 b.词法规则
c.产生规则 d.词法规则
7、词法分析器的输入是 。
a.单词符号串 b.源程序
c.语法单位 d.目标程序
8、中间代码生成时所遵循的是- 。
a.语法规则 b.词法规则
c.语义规则 d.等价变换规则
9、编译程序是对 。
a.汇编程序的翻译 b.高级语言程序的解释执行
c.机器语言的执行 d.高级语言的翻译
10、语法分析应遵循 。
a.语义规则 b.语法规则
c.构词规则 d.等价变换规则
解答
1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。
2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。
3、对编译而言,变量既持有左值又持有右值,故选c。
4、编译程序打交道最多的就是各种表格,因此选d。
5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。
6、词法分析遵循的是构词规则,语法分析遵循的是语法规则,中间代码生成遵循的是语义规则,并且语义规则可以定义一个程序的意义。因此选a。
7、b 8、c 9、d 10、c
二、多项选择题
1、编译程序各阶段的工作都涉及到 。
a.语法分析 b.表格管理 c.出错处理
d.语义分析 e.词法分析
2、编译程序工作时,通常有 阶段。
a.词法分析 b.语法分析 c.中间代码生成
d.语义检查 e.目标代码生成
解答
1.b、c 2. a、b、c、e
三、填空题
1、解释程序和编译程序的区别在于 。
2、编译过程通常可分为5个阶段,分别是 、语法分析 、代码优化和目标代码生成。 3、编译程序工作过程中,第一段输入是 ,最后阶段的输出为 程序。
4、编译程序是指将 程序翻译成 程序的程序。 解答
是否生成目标程序 2、词法分析 中间代码生成 3、源程序 目标代码生成 4、源程序 目标语言
一、单项选择题
1、文法G:S→xSx|y所识别的语言是 。
a. xyx b. (xyx)* c. xnyxn(n≥0) d. x*yx*
2、文法G描述的语言L(G)是指 。
a. L(G)={α|S+ ⇒α , α∈VT*} b. L(G)={α|S*⇒α, α∈VT*}
c. L(G)={α|S*⇒α,α∈(VT∪VN*)} d. L(G)={α|S+ ⇒α, α∈(VT∪VN*)}
3、有限状态自动机能识别 。
a. 上下文无关文法 b. 上下文有关文法
c.正规文法 d. 短语文法
4、设G为算符优先文法,G的任意终结符对a、b有以下关系成立 。
a. 若f(a)>g(b),则a>b b.若f(a)<g(b),则a<b
c. a~b都不一定成立 d. a~b一定成立
5、如果文法G是无二义的,则它的任何句子α 。
a. 最左推导和最右推导对应的语法树必定相同
b. 最左推导和最右推导对应的语法树可能不同
c. 最左推导和最右推导必定相同
d. 可能存在两个不同的最左推导,但它们对应的语法树相同
6、由文法的开始符经0步或多步推导产生的文法符号序列是 。
a. 短语 b.句柄 c. 句型 d. 句子
7、文法G:E→E+T|T
T→T*P|P
P→(E)|I
则句型P+T+i的句柄和最左素短语为 。
a.P+T和i b. P和P+T c. i和P+T+i d.P和T
8、设文法为:S→SA|A
A→a|b
则对句子aba,下面 是规范推导。
a. SÞSAÞSAAÞAAAÞaAAÞabAÞaba
b. SÞSAÞSAAÞAAAÞAAaÞAbaÞaba
c. SÞSAÞSAAÞSAaÞSbaÞAbaÞaba
d. SÞSAÞSaÞSAaÞSbaÞAbaÞaba
9、文法G:S→b|∧(T)
T→T,S|S
则FIRSTVT(T) 。
a. {b,∧,(} b. {b,∧,)} c.{b,∧,(,,} d.{b,∧,),,}
10、产生正规语言的文法为 。
a. 0型 b. 1型 c. 2型 d. 3型
11、采用自上而下分析,必须 。
a. 消除左递归 b. 消除右递归 c. 消除回溯 d. 提取公共左因子
12、在规范归约中,用 来刻画可归约串。
a. 直接短语 b. 句柄 c. 最左素短语 d. 素短语
13、有文法G:E→E*T|T
T→T+i|i
句子1+2*8+6按该文法G归约,其值为 。
a. 23 B. 42 c. 30 d. 17
14、规范归约指 。
a. 最左推导的逆过程 b. 最右推导的逆过程
c. 规范推导 d. 最左归约的逆过程
[解答]
1、选c。
2、选a。
3、选c。
4、虽然a与b没有优先关系,但构造优先函数后,a与b就一定存在优先关系了。所以,由f(a)>g)(b)或f(a)<g(b)并不能判定原来的a与b之间是否存在优先关系:故选c。
5、如果文法G无二义性,则最左推导是先生长右边的枝叶:对于d,如果有两个不同的是了左推导,则必然有二义性。故选a。
6、选c。
7、由图2-8-1的语法树和优先关系可以看出应选b。

8、规范推导是最左推导,故选d。
9、由T→T,…和T→(… 得FIRSTVT(T))={(,,)};
由T→S得FIRSTVT(S)⊂FIRSTVT(T),而FIRSTVT(S)={b,∧,(};即
FIRSTVT(T)={b,∧,(,,}; 因此选c。
10、d 11、c 12、b 13、b 14、b
二、多项选择题
1、下面哪些说法是错误的 。
a. 有向图是一个状态转换图 b. 状态转换图是一个有向图
c.有向图是一个DFA d.DFA可以用状态转换图表示
2、对无二义性文法来说,一棵语法树往往代表了 。
a. 多种推导过程 b. 多种最左推导过程 c.一种最左推导过程
d.仅一种推导过程 e.一种最左推导过程
3、如果文法G存在一个句子,满足下列条件 之一时,则称该文法是二义文法。
a. 该句子的最左推导与最右推导相同
b. 该句子有两个不同的最左推导
c. 该句子有两棵不同的最右推导
d. 该句子有两棵不同的语法树
e.该句子的语法树只有一个
4、有一文法G:S→AB
A→aAb|ε
B→cBd|ε
它不产生下面 集合。
a. {anbmcndm|n,m≥0} b. {anbncmdm|n,m>0}
c. {anbmcmdn|n,m≥0} d. {anbncmdm|n,m≥0}
e. {anbncndn|n≥0}
5、自下而上的语法分析中,应从 开始分析。
a. 句型 b. 句子 c. 以单词为单位的程序
d. 文法的开始符 e. 句柄
6、对正规文法描述的语言,以下 有能力描述它。
a.0型文法 b.1型文法 c.上下文无关文法 d.右线性文法 e.左线性文法
解答 1、e、a、c 2、a、c、e 3、b、c、d 4、a、c 5、b、c 6、a、b、c、d、e
三、填空题
1、文法中的终结符和非终结符的交集是 。词法分析器交给语法分析器的文法符号一定是 ,它一定只出现在产生式的 部。
2、最左推导是指每次都对句型中的 非终结符进行扩展。
3、在语法分析中,最常见的两种方法一定是 分析法,另一是 分析法。
4、采用 语法分析时,必须消除文法的左递归。
5、 树代表推导过程, 树代表归约过程。
6、自下而上分析法采用 、归约、错误处理、 等四种操作。
7、Chomsky把文法分为 种类型,编译器构造中采用 和 文法,它们分别产生 和 语言,并分别用 和 自动机识别所产生的语言。
解答 1、空集 终结符 右
2、最左
3、自上而上 自下而上
4、自上而上
5、语法 分析
6、移进 接受
7、4 2 型 3型 上下文无关语言 正规语言 下推自动机 有限
四、判断题
1、文法 S→aS|bR|ε描述的语言是(a|bc)* ( )
R→cS
2、在自下而上的语法分析中,语法树与分析树一定相同。 ( )
3、二义文法不是上下文无关文法。 ( )
4、语法分析时必须先消除文法中的左递归。 ( )
5、规范归约和规范推导是互逆的两个过程。 ( )
6、一个文法所有句型的集合形成该文法所能接受的语言。 ( )
解答 1、对 2、错 3、错 4、错 5、错 6、错
五、简答题
1、句柄 2、素短语 3、语法树 4、归约 5、推导
[解答]
1、句柄:一个句型的最左直接短语称为该句型的句柄。
2、素短语:至少含有一个终结符的素短语,并且除它自身之外不再含任何更小的素短语。
3、语法树:满足下面4个条件的树称之为文法G[S]的一棵语法树。
①每一终结均有一标记,此标记为VN∪VT中的一个符号;
②树的根结点以文法G[S]的开始符S标记;
③若一结点至少有一个直接后继,则此结点上的标记为VN中的一个符号;
④若一个以A为标记的结点有K个直接后继,且按从左至右的顺序,这些结点的标记分别为X1,X2,…,XK,则A→X1,X2,…,XK,必然是G的一个产生式。
4、归约:我们称αγβ直接归约出αAβ,仅当A→γ 是一个产生式,且α、β∈(VN∪VT)*。归约过程就是从输入串开始,反复用产生式右部的符号替换成产生式左部符号,直至文法开始符。
5、推导:我们称αAβ直接推出αγβ,即αAβÞαγβ,仅当A→ γ 是一个产生式,且α、β∈(VN∪VT)*。如果α1Þα2Þ…Þαn,则我们称这个序列是从α1至α2的一个推导。若存在一个从α1αn的推导,则称α1可推导出αn。推导是归约的逆过程。
六、问答题
1、给出上下文无关文法的定义。
[解答]
一个上下文无关文法G是一个四元式(VT,VN,S, P),其中:
●VT是一个非空有限集,它的每个元素称为终结符号;
●VN是一个非空有限集,它的每个元素称为非终结符号,VT∩VN=Φ;
●S是一个非终结符号,称为开始符号;
●P是一个产生式集合(有限),每个产生式的形式是P→α,其中,P∈VN,
α∈(VT∪VN)*。开始符号S至少必须在某个产生式的左部出现一次。
2、文法G[S]:
S→aSPQ|abQ
QP→PQ
bP→bb
bQ→bc
cQ→cc
(1)它是Chomsky哪一型文法?
(2)它生成的语言是什么?
[解答]
(1)由于产生式左部存在终结符号,且所有产生式左部符号的长度均小于等于产生式右部的符号长度,所以文法G[S]是Chomsky1型文法,即上下文有关文法。
(2)按产生式出现的顺序规定优先级由高到低(否则无法推出句子),我们可以得到:
SÞabQÞabc
SÞaSPQÞaabQPQÞaabPQQÞaabbQQÞaabbcQÞaabbcc
SÞaSPQÞaaSPQPQÞaaabQPQPQÞaaabPQQPQÞaaabPQPQQÞaaaPPQQQÞ
aaabbPqqqÞaaabbQQQÞaaabbbcQQÞaaabbbccQÞaaabbbccc
……
于是得到文法G[S]生成的语言L={anbncn|n≥1}
3、按指定类型,给出语言的文法。
L={aibj|j>i≥1}的上下文无关文法。
【解答】
(1)由L={aibj|j>i≥1}知,所求该语言对应的上下文无关文法首先应有S→aSb型产生式,以保证b的个数不少于a的个数;其次,还需有S→Sb或S→bS型的产生式,用以保证b的个数多于a的个数;也即所求上下文无关文法G[S]为:
G[S]:S→aSb|Sb|b
4、有文法G:S→aAcB|Bd
A→AaB|c
B→bScA|b
(1)试求句型aAaBcbbdcc和aAcbBdcc的句柄;
(2)写出句子acabcbbdcc的最左推导过程。
【解答】(1)分别画出对应两句型的语法树,如图2-8-2所示
句柄:AaB Bd

图2-8-2 语法树
(2)句子acabcbbdcc的最左推导如下:
SÞaAcBÞaAaBcBÞacaBcBÞacabcBÞacabcbScAÞacabcbBdcA
ÞacabcbbdcAÞacabcbbdcc
5、对于文法G[S]:
S→(L)|aS|a L→L, S|S
(1)画出句型(S,(a))的语法树。(2)写出上述句型的所有短语、直接短语、句柄和素短语。
【解答】
(1)句型(S,(a))的语法树如图2-8-3所示

(2)由图2-8-3可知:
①短语:S、a、(a)、S,(a)、(S,(a));
②直接短语:a、S;
③句柄:S;
④素短语:素短语可由图2-8-3中相邻终结符之间的优先关系求得,即;

因此素短语为a。
6、考虑文法G[T]:
T→T*F|F
F→F↑P|P
P→(T)|i
证明T*P↑(T*F)是该文法的一个句型,并指出直接短语和句柄。
【解答】
首先构造T*P↑(T*F)的语法树如图2-8-4所示。

由图2-8-4可知,T*P↑(T*F)是文法G[T]的一个句型。
直接短语有两个,即P和T*F;句柄为P。

一、单项选择题
1、词法分析所依据的是 。
a. 语义规则 b. 构词规则 c. 语法规则 d. 等价变换规则
2、词法分析器的输出结果是 。
a. 单词的种别编码 b. 单词在符号表中的位置
c. 单词的种别编码和自身值 d. 单词自身值
3、正规式M1和M2等价是指 。
a. M1和M2的状态数相等 b. M1和M2的有向弧条数相等
c. M1和M2所识别的语言集相等 d. M1和M2状态数和有向弧条数相等
4、状态转换图(见图3-6-1)接受的字集为 。

a. 以 0开头的二进制数组成的集合 b. 以0结尾的二进制数组成的集合
c. 含奇数个0的二进制数组成的集合 d. 含偶数个0的二进制数组成的集合
5、词法分析器作为独立的阶段使整个编译程序结构更加简洁、明确,因此, 。
a. 词法分析器应作为独立的一遍 b. 词法分析器作为子程序较好
c. 词法分析器分解为多个过程,由语法分析器选择使用 d. 词法分析器并不作为一个独立的阶段
解答 1、b 2、c 3、c 4、d 5、b
二、多项选择题
1、在词法分析中,能识别出 。
a. 基本字 b. 四元式 c. 运算符
d. 逆波兰式 e. 常数
2、令∑={a,b},则∑上所有以b开头,后跟若干个ab的字的全体对应的正规式为 。
a. b(ab)* b. b(ab)+ c.(ba)*b
d. (ba)+b e. b(a|b)
解答 1、a、c、e 2、a、b、d
三、填空题
1、确定有限自动机DFA是 的一个特例。
2、若二个正规式所表示的 相同,则认为二者是等价的。
3、一个字集是正规的,当且仅当它可由 所 。
解答 1、NFA 2、正规集 3、DFA(NFA)所识别
四、判断题
1、一个有限状态自动机中,有且仅有一个唯一终态。 ( )
2、设r和s分别是正规式,则有L(r|s)=L(r)|L(s)。 ( )
3、自动机M和M′的状态数不同,则二者必不等价。 ( )
4、确定的自动机以及不确定的自动机都能正确地识别正规集。 ( )
5、对任意一个右线性文法G,都存在一个NFA M,满足L(G)=L(M)。 ( )
6、对任意一个右线性文法G,都存在一个DFA M,满足L(G)=L(M)。 ( )
7、对任何正规表达式e,都存在一个NFA M,满足L(G)=L(e)。 ( )
8、对任何正规表达式e,都存在一个DFA M,满足L(G)=L(e)。 ( )
解答 1 、2、3、错 4、5、6、7、8、正确
五、基本题
1、设M=({x,y}, {a,b}, f,x,{y})为一非确定的有限自动机,其中f定义如下:
f(x,a)={x,y} f(x,b)={y}
f(y,a)=φ f(y,b)={x,y}
试构造相应的确定有限自动机M′。
解答:对照自动机的定义M=(S,Σ,f,S0,Z),由f的定义可知f(x,a)、f(y,b)均为多值函数,所以是一非确定有限自动机,先画出NFA M相应的状态图,如图3-6-2所示。

用子集法构造状态转换矩阵表3-6-3所示。
I Ia Ib
{x} {x,y} {y}
{y} — {x,y}
{x,y} {x,y} {x,y}
将转换矩阵中的所有子集重新命名而形成表3-6-4所示的状态转换矩阵。
表3-6-4 状态转换矩阵
a b
0 2 1
1 — 2
2 2 2
即得到M′=({0,1,2}, {a,b}, f,0, {1,2}),其状态转换图如图3-6-5所示。

将图3-6-5的DFA M′最小化。首先,将M′的状态分成终态组{1,2}与非终态组{0};其次,考察{1,2}。由于{1,2}a={1,2}b={2}⊂{1,2},所以不再将其划分了,也即整个划分只有两组{0},{1,2}:令状态1代表{1,2},即把原来到达2的弧都导向1,并删除状态2。最后,得到如图3-6-6所示化简DFA M′。

2、对给定正规式b*(d|ad)(b|ab)+,构造其NFA M;
解答:首先用A+=AA*改造正规式得:b*(d|ad)(b|ab)(b|ab)*;其次,构造该正规式的NFA M,如图3-6-7所示。
求采纳为满意回答。

⑦ C++运行问题

有两个错误:
#include<iostream.h>
typedef unsigned short USHORT;
typedef unsigned short ULONG;
//ULONG GrtPower(USHORT n,USHORT power); //错误1.GrtPower拼写错误
ULONG GetPower(USHORT n,USHORT power);
int main()
{
USHORT number,power;
ULONG answer;
cout<<"Enter a number:";
cin>>number;
cout<<"To what power?";
cin>>power;
answer=GetPower(number,power);
cout<<number<<"to the"<<power<<"th power is"<<
answer<<endl;
return 0;
}
//ULONG GetPower(USHORT n,USHORT power);//错误2.后面的;去掉
ULONG GetPower(USHORT n,USHORT power)
{
if(power==1)
return n;
else
return(n*GetPower(n,power-1));
}

热点内容
ubuntu搭建samba服务器 发布:2025-02-07 05:52:54 浏览:54
小型企业网如何配置可以互通 发布:2025-02-07 05:33:56 浏览:243
09年crv哪个配置好 发布:2025-02-07 05:17:31 浏览:555
nvm源码编译 发布:2025-02-07 05:13:19 浏览:126
防伪码查询源码 发布:2025-02-07 05:09:39 浏览:769
安卓机的通知在哪里 发布:2025-02-07 05:09:01 浏览:282
密码74是什么意思 发布:2025-02-07 05:02:10 浏览:47
苹果es浏览器无法连接ftp 发布:2025-02-07 04:59:57 浏览:285
javaa和a 发布:2025-02-07 04:58:24 浏览:64
应用锁的密码在哪里查 发布:2025-02-07 04:47:25 浏览:507