正规文法构造正规式(安徽大学编译原理实验报告)

正规文法构造正规式(安徽大学编译原理实验报告)
正规文法构造正规式(安徽大学编译原理实验报告)

由正规文法构造正规式

【实验目的】

输入:任意的正规文法。

输出:相应的正规式。

【实验原理】

3型文法(正则文法,线性文法)

如果对于某文法G,P中的每个规则具有下列形式:

U :: = T 或U :: = WT

其中T∈VT;U,W∈VN,则称该文法G为左线性文法。

如果对于某文法G,P中的每个规则具有下列形式:

U :: = T 或U :: = TW

其中T∈VT;U, W∈VN,则称该文法G为右线性文法。

左线性文法和右线性文法通称为3型文法或正则文法,有时又称为有穷状态文法,简写为RG。

按照定义,对于正则文法应用规则时,单个非终结符号只能被替换为单个终结符号,或被替换为单个非终结符号加上单个终结符号,或者被替换为单个终结符号加上单个非终结符号。

3型文法所确定的语言为3型语言L3,3型语言可由确定的有限状态自动机来识别。

【程序代码】

#include

#include

#include

#include

#include

#include

using namespace std;

struct relation{

string _left,_right;

};

vector rel;

string VN;

relation get_realation(string str){

int t=str.find('-');

relation r;

r._left=str.substr(0,t);

r._right=str.substr(t+2,str.length()-t);

return r;

}

vector find_Vn(char c){

vector v;

for(int i=0;i

if(rel[i]._left[0]==c){

v.push_back(rel[i]);

}

return v;

}

void print(){

cout<<"[ RG->RE C++ 2012/4/27 COPYRIGHT FROM NINGYU ]"<

void init(){

print();

cout<<"input the RG ,End with Ctrl+Z (note:begin with S)"<

string strPath;

relation r;

int p;

while(cin>>strPath){

rel.push_back(get_realation(strPath));

if(rel[rel.size()-1]._left.length()==1){

char c=rel[rel.size()-1]._left[0];

if(c<='Z'&&c>='A')

{

int t=VN.find(c);

if(t==string::npos)

VN+=c;

}

}

}

}

string dfs(char c){

bool flag;

vector v1,v2,v3,v4;

v4=find_Vn(c);

for(int i=0;i

char t=v4[i]._right[v4[i]._right.length()-1];

if(t==c)

v1.push_back(v4[i]);

else if(t<='Z'&&t>='A')

v2.push_back(v4[i]);

else v3.push_back(v4[i]);

}

relation r;

r._left.push_back(c);

for(int i=0;i

char t=v2[i]._right[v2[i]._right.length()-1];

string s=v2[i]._right.substr(0,v2[i]._right.length()-1);

s+=dfs(t);

r._right=s;

v3.push_back(r);

}

relation r1;

r1._left.push_back(c);

r1._right.push_back('(');

flag=0;

for(int i=0;i

if(flag)

r1._right+='|';

else flag=1;

r1._right+=v3[i]._right;

}

r1._right.push_back(')');

relation r2;

r2._left.push_back(c);

r2._right.push_back('(');

for(int i=0,flag=0;i

if(flag) r2._right.push_back('|');

else flag=1;

r2._right+=v1[i]._right.substr(0,v1[i]._right.length()-1);

}

r2._right.push_back(')');

r1._right='('+r2._right+')'+'*'+r1._right;

return r1._right;

}

string regular(string s){ string str1;

stack sta1;

for(int i=0;i

if(s[i]=='('||s[i]<='z'&&s[i]>='a'||s[i]=='|'){

sta1.push(s[i]);

continue;

}

else if(s[i]==')'){

if(sta1.top()=='(')

sta1.pop();

else sta1.push(s[i]);

}

else if(s[i]=='*'){

if(sta1.size()==0)

continue;

else if(sta1.top()=='*')

continue;

else sta1.push(s[i]);

}

}

while(sta1.size()!=0){

str1+=sta1.top();

sta1.pop();

}

reverse(str1.begin(),str1.end());

return str1;

}

int main(){

init();

string s=dfs('S');

cout<

<<" RE :"

<

print();

return 0;

}

【结果截图】

压缩文法的等价变换

课程名称: 压缩文法的等价转换 年级/专业/班: 11级计算机类(二)班 姓名: 徐勇兵 学号: E01114278

压缩文法的等价变换 实验目的: 1.了解有关文法的实用限制。 2.实现用计算机判断有害规则和多余规则。 实验要求: 除了可查看压缩了的文法,还可查看删除了哪些规则 输入:任意的上下文无关文法 输出:等价的压缩了的文法 实验原理: 所谓有害规则,是指形为U→U的产生式,它对描述语言显然是没有必要的。 所谓多余规则,有两种情况:一种非终结符不在任何产生式右端,这样该产生式无法用到,成为不可到达的。另一种是从某个非终结符无法推出终结符号,称为不可终止的。 实验算法: 有害规则非常好判断,只需判断箭头左右两个字符串是否相等。(注:其实在上下文无关文法中,箭头左边只有一个非终结符,在程序里把它看成字符串而不是单个字符是因为可以直接使用C++语言里的字符串比较函数来判断,省得增加麻烦。) 判断不可到达时,将所有产生式右边的非终结符收集起来放进一个数组,再判断左边是否有不含在该数组的非终结符(开始符号S除外),若有,则为不可到达的。 判断不可终止时,先假定所有非终结符都是不可终止的,再扫描所有产生式,若产生式右边不含左边的非终结符,则修改假定为可终止的。 将所有有害规则放在一个数组中,所有不可到达规则放在一个数组中,所有不可终止规则放在一个数组中,最后按实验要求分类列出这些要删除的规则。压缩后的规则从原规则中减去这些规则产生。 实验结果:(java)

import java.util.Vector; import javax.swing.JOptionPane; public class test1 { public class End { Vector end=new Vector(); public void add() { while(true) {

编译原理语法分析实验报告

编译原理语法分析实验报告 - 班级:XXX 学号:XXX 姓名:XXX 年月日 1、摘要: 用递归子程序法实现对pascal的子集程序设计语言的分析程序 2、实验目的: 通过完成语法分析程序,了解语法分析的过程和作用 3、任务概述 实验要求:对源程序的内码流进行分析,如为文法定义的句子输出”是”否则输出”否”,根据需要处理说明语句填写写相应的符号表供以后代码生成时使用 4、实验依据的原理 递归子程序法是一种自顶向下的语法分析方法,它要求文法是LL(1)文法。通过对文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时,程序能够按LL(1)形式唯一地确定选择某个候选式进行推导,最终识别输入串是否与文法匹配。 递归子程序法的缺点是:对文法要求高,必须满足LL(1)文法,当然在某些语言中个别产生式的推导当不满足LL(1)而满足LL(2)时,也可以采用多向前扫描一个符号的办法;它的另一个缺点是由于递归调用多,所以速度慢占用空间多,尽管这样,它还是许多高级语言,例如PASCAL,C等编译系统常常采用的语法分析方法。

为适合递归子程序法,对实验一词法分析中的文法改写成无左递归和无左共因子的,,,如下: <程序>?<程序首部><分程序>。 <程序首部>?PROGRAM标识符; <分程序>?<常量说明部分><变量说明部分><过程说明部分> <复合语句> <常量说明部分>?CONST<常量定义><常量定义后缀>;|ε <常量定义>?标识符=无符号整数 <常量定义后缀>?,<常量定义><常量定义后缀> |ε <变量说明部分>?VAR<变量定义><变量定义后缀> |ε <变量定义>?标识符<标识符后缀>:<类型>; <标识符后缀>?,标识符<标识符后缀> |ε <变量定义后缀>?<变量定义><变量定义后缀> |ε <类型>?INTEGER | LONG <过程说明部分>?<过程首部><分程序>;<过程说明部分后缀>|ε <过程首部>?PROCEDURE标识符<参数部分>; <参数部分>?(标识符: <类型>)|ε <过程说明部分后缀>?<过程首部><分程序>;<过程说明部分后缀>|ε <语句>?<赋值或调用语句>|<条件语句>|<当型循环语句>|<读语句> |<写语句>|<复合语句>|ε <赋值或调用语句>?标识符<后缀> <后缀>?:=<表达式>|(<表达式>)|ε <条件语句>?IF<条件>THEN<语句> <当型循环语句>?WHILE<条件>DO <语句> <读语句>?READ(标识符<标识符后缀>)

安徽大学操作系统试验四

实验三、页式地址重定位模拟 班级:软件工程学号:E21314003 姓名:李世 一、实验目的: 1、用高级语言编写和调试模拟实现页式地址重定位。 2、加深理解页式地址重定位技术在多道程序设计中的作用和意义。 二、实验原理: 当进程在CPU上运行时,如指令中涉及逻辑地址时,操作系统自动根据页长得到页号和页内偏移,把页内偏移拷贝到物理地址寄存器,再根据页号,查页表,得到该页在内存中的块号,把块号左移页长的位数,写到物理地址寄存器。 三、实验内容: 1、设计页表结构 2、设计地址重定位算法 3、有良好的人机对话界面 四、调试截屏

五、源代码: #include #include #define pagesize 1024 #define pagetablelength 64 const int pagetable[pagetablelength]={11,12,25,69,87,45,23,36,58,96,14,38,39,40,50,60,70,80,90}; void main() { cout<<"********************************************\n* 页式地址重定位模拟*\n* 作者:李世E21314003 *\n* 13级软件工程*\n********************************************\n"; int logicaladdress=0; int pagenum=0; int w=0; cout<<"系统页号对应块号情况(页号-->块号):\n"; for(int i=0;i<64;i++) { cout<"<>logicaladdress; pagenum=logicaladdress/pagesize; w=logicaladdress%pagesize; if(pagenum>pagetablelength)

安徽大学计算机考研复试题

2013年及历年安徽大学计算机研究生复试题 ——希望对大家有所帮助笔试部分: 笔试考的是C语言和数据库,推荐看谭浩强的C以及苗雪兰的数据库原理,这是安大本科的教材。 前面是选择题和填空题,选择题10题,每题两分。填空题5题,每题两分,不是很难,上面两本书看个差不多就行,然后是程序阅读题,两题,每题5分,也比较简单。 再就是数据库的两个大题,每题15分。 第一个是给了个有关仓库、零件和职工的描述,要求给出E-R图,转换为关系模型,并指出主码和外码。苗的书上有类似的! 第二个是学生、图书、借书的SQL查询,前两个简单的,后面两个也不难。苗的书上都有 再就是C语言编程:每题10分 第一个是一个四位数。要求其百位数为0,千位数和十位数、个位数组成的三位数乘以9等于原来的四位数。不怎么难。 第二个是输入一行字符,求其中英文字符、空格、数字及其他字符的个数。不难。 机试部分:(共3题): 第一个:通过相关的等式(已给)求∏的近似值。 第二个:输入一个3*3的矩阵,要求输出以下矩阵:下三角元素为相应对称元素的之和,上三角元素全为0。 第三个:输入一个一维各个数组元素值,比如:9 3 2 1 4 8 0 7 5 6. 要求按从大到小输出其中k个最大的值,按从小到大输出其中k个最小的值。如输出9 8 7 ,输出1 2 3。面试部分:(抽3题回答两题) 先是自我介绍,然后老师用英语问几个小问题,比如你喜欢什么运动,喜欢数学吗,你是一个快乐的人吗,兴趣、爱好等,比较简单。 然后就是抽专业课的题,三选二,很杂。 有:离散,数据结构,软件工程,编译原理,数据库,C语言,最多的是网络和数据库。我已知的题有: n个顶点的无向完全图最多有多少条边 一般大型软件的测试分为哪几个步骤 DMA接口的组成部分 数据库系统有哪些组成部分 数据库系统有哪些特点 怎么解决ip地址的短缺问题 分页存储管理需要哪些硬件支持 作为中间设备,转发器,网桥,路由器的区别

编译原理实验报告(语法分析器)

. 编译原理实验专业:13级网络工程

语法分析器1 一、实现方法描述 所给文法为G【E】; E->TE’ E’->+TE’|空 T->FT’ T’->*FT’|空 F->i|(E) 递归子程序法: 首先计算出五个非终结符的first集合follow集,然后根据五个产生式定义了五个函数。定义字符数组vocabulary来存储输入的句子,字符指针ch指向vocabulary。从非终结符E函数出发,如果首字符属于E的first集,则依次进入T函数和E’函数,开始递归调用。在每个函数中,都要判断指针所指字符是否属于该非终结符的first集,属于则根据产生式进入下一个函数进行调用,若first集中有空字符,还要判断是否属于该非终结符的follow集。以分号作为结束符。 二、实现代码 头文件shiyan3.h #include #include

#include using namespace std; #define num 100 char vocabulary[num]; char *ch; void judge_E(); void judge_EE(); void judge_T(); void judge_TT(); void judge_F(); 源文件 #include"shiyan3.h" void judge_E() { if(*ch==';') { cout<<"该句子符合此文法!"<

int a=0; cout<<"按1结束程序"<>a; if(a==1) exit(0); } else if(*ch=='('||*ch=='i') { judge_T(); judge_EE(); } else { cout<<"该句子不匹配此文法!"<>a; if(a==1) exit(0); }

安徽大学计算机操作系统历年考试题库

操作系统第一章 一、选择题(从题目给出的A、B、C、D四个答案中,选择一个正确的答案,把答案编号填在题目的______处) 1.操作系统的管理部分负责对进程进行调度。 A.主存储器 B.控制器 C.运算器 D.处理机 2.操作系统是对进行管理的软件。 A.软件 B.硬件 C.计算机资源 D.应用程序 3.从用户观点看,操作系统是。 A.用户与计算机之间的接口。 B.控制和管理计算机资源的软件。 C.合理地组织计算机工作流程的软件。 D.由若干层次的程序按一定的结构组成的有机体。 4.操作系统中采用多道程序设计技术提高CPU和外部设备 的。 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.内存越多 11.分时操作系统通常采用策略为用户服务。 A.可靠性和灵活性 B.时间片轮转 C.时间片加权分配 D.短作业优先 12.操作系统允许用户把若干个作业提交给计算机系统。 A.单用户 B.分布式 C.批处理 D.监督 13.设计实时操作系统时,首先应考虑系统的。 A.可靠性和灵活性 B.实时性和可靠性 C.灵活性和可靠性 D.优良性和分配性 14.若把操作系统看作计算机系统资源的管理者,下列的不属于操作系 统所管理的资源。 A.程序 B.内存 C.CPU D.中断 15.操作系统负责管理计算机系统的__________,其中包括处理机、主存、 外围设备和系统中的数据。 A.程序 B.文件 C.资源 D.进程 16.当系统处于用户态时,不能执行。

编译原理实验报告

编译原理实验报告 班级 姓名: 学号: 自我评定:

实验一词法分析程序实现 一、实验目的与要求 通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。 二、实验内容 根据教学要求并结合学生自己的兴趣和具体情况,从具有代表性的高级程序设计语言的各类典型单词中,选取一个适当大小的子集。例如,可以完成无符号常数这一类典型单词的识别后,再完成一个尽可能兼顾到各种常数、关键字、标识符和各种运算符的扫描器的设计和实现。 输入:由符合或不符合所规定的单词类别结构的各类单词组成的源程序。 输出:把单词的字符形式的表示翻译成编译器的内部表示,即确定单词串的输出形式。例如,所输出的每一单词均按形如(CLASS,VALUE)的二元式编码。对于变量和常数,CLASS字段为相应的类别码;VALUE字段则是该标识符、常数的具体值或在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串;常数表登记项中则存放该常数的二进制形式)。对于关键字和运算符,采用一词一类的编码形式;由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空”。另外,为便于查看由词法分析程序所输出的单词串,要求在CLASS字段上放置单词类别的助记符。 三、实现方法与环境 词法分析是编译程序的第一个处理阶段,可以通过两种途径来构造词法分析程序。其一是根据对语言中各类单词的某种描述或定义(如BNF),用手工的方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应的状态矩阵,该状态矩阵同控制程序便组成了编译器的词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序的另外一种途径是所谓的词法分析程序的自动生成,即首先用正规式对语言中的各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程序所应进行的语义处理工作,然后由一个所谓词法分析程序的构造程序对上述信息进行加工。如美国BELL实验室研制的LEX就是一个被广泛使用的词法分析程序的自动生成工具。 总的来说,开发一种新语言时,由于它的单词符号在不停地修改,采用LEX等工具生成的词法分析程序比较易于修改和维护。一旦一种语言确定了,则采用手工编写词法分析程序效率更高。 四、实验设计 1)题目1:试用手工编码方式构造识别以下给定单词的某一语言的词法分析程序。 语言中具有的单词包括五个有代表性的关键字begin、end、if、then、else;标识符;整型常数;六种关系运算符;一个赋值符和四个算术运算符。参考实现方法简述如下。 单词的分类:构造上述语言中的各类单词符号及其分类码表。 表I 语言中的各类单词符号及其分类码表 单词符号类别编码类别码的助记符单词值

安徽大学编译原理试验斯

不确定的有穷自动机的化简 2015年11月25日星期三班级:软件工程学号: E21314003 姓名:李世1. 目的与要求 通过设计、编写和调试,将不确定的有穷自动机转换为与之等价的确定的有穷自动机的程序,使学生了解子集法。掌握转换过程中的相关概念和方法。DFA的表现形式可以是表格或图形。 2. 理论基础 有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规式所表示的集合. 应用有穷自动机这个理论,为词法分析程序的自动构造寻找有效的方法和工具。有穷自动机分为两类,即,确定的有穷自动机(Deterministic Finite Automata)和不确定的有穷自动机(Nondeterministic Finite Automata) 。(1) 不确定的有穷自动机的定义:一个不确定的有穷自动机(NFA)M是一个五元组: NFA M={K,Σ,f,S,Z}, 其中: K为状态的有穷非空集; Σ 为有穷输入字母表; f为K× Σ* 到K的子集(2K)的一种映射, 2K表示K的幂集(f不是一个单值函数); S?K是初始状态集; Z ?K为终止状态集. 例子: NFA M=({S,P,Z},{0,1},f,{S,P},{Z}),其中: f(S,0)={P}//函数的结果为集合 f(S,1)={S,Z} f(P,1)={Z} f(Z,0)={P} f(Z,1)={P} 状态图表示为:

矩阵表示为: (2) 确定的有穷自动机的定义:一个确定的有穷自动机(DFA)M 是一个五元组:M=(K,Σ,f,S,Z) 其中: K是一个有穷集,它的每个元素称为一个状态; Σ是一个有穷字母表,它的每个元素称为一个输入符号,所以也称Σ为输入符号表; f是转换函数,是在K×Σ→K上的映射,即,如f(ki,a)=kj,(ki ∈K,kj∈K)就意味着,当前状态为ki,输入符为a时,将转换为下一个状态kj,我们把kj称作ki的一个后继状态; S∈K是唯一的一个初态; Z? K是一个终态集,终态也称可接受状态或结束状态。 例子: DFA M=({S,U,V,Q},{a,b},f,S,{Q}),其中f定义为: f(S,a)=U f(V,a)=U f(S,b)=V f(V,b)=Q f(U,a)=Q f(Q,a)=Q f(U,b)=V f(Q,b)=Q 状态图表示为:

2011-2012安徽大学编译原理补考试卷

安徽大学20 11 —20 12 学年第一学期 《编译原理》考试试卷(B卷) (闭卷时间120分钟) 院/系年级专业姓名学号 一、(15分)设字母表∑={a,b}, 1. 写出不是以a开头,但以aa结尾的字符串集合的正规表达式r(5分)。 2. 构造NFA M,使得L(M)=L(r);(5分) 3. 将NFA M 确定化、最小化,得到DFA M1,使得L(M1)=L(M)。(5分)

二、(20分)设文法G[S]如下: S →i (B )SA S →a A →eS A →ε B →b 1.(5分)求出各非终结符的first 集合和follow 集合,填入下表: 2.(10 3.(5 三 、(20分)设文法G[S]: S →aS S →bS S →a 1. 文法G[S]属于乔姆斯基哪一型文法?(2分) 2. 符号串abbaa 是不是该文法的一个句型?请证实。(方法不限)(3分) 3. 若是句型,写出该句型的所有短语、直接短语、素短语、最左素短语以及句柄(5分)

4. 求出该文法的firstvt集和lastvt集,构造算符优先关系表填入下表。(10分) 四、(25分)设CFG文法G[S]如下: S→aABe A→Abc A→b B→d 1.(4分)写出该文法的拓广文法: 2.(9分)构造识别全部活前缀的DFA,填入下表:

3.(5分)构造该文法的LR(0)分析表,填入下表: 4.(7分)将abbc的分析过程填入下表: 五、(5分)对于下面的程序 program test (input,output); var a :integer procedure cala(x:integer); temp:integer; begin x:=a+1; temp:=a+2;

编译原理实验三-自下而上语法分析及语义分析.docx

上海电力学院 编译原理 课程实验报告 实验名称:实验三自下而上语法分析及语义分析 院系:计算机科学和技术学院 专业年级: 学生姓名:学号: 指导老师: 实验日期: 实验三自上而下的语法分析 一、实验目的: 通过本实验掌握LR分析器的构造过程,并根据语法制导翻译,掌握属性文法的自下而上计算的过程。 二、实验学时: 4学时。 三、实验内容

根据给出的简单表达式的语法构成规则(见五),编制LR分析程序,要求能对用给定的语法规则书写的源程序进行语法分析和语义分析。 对于正确的表达式,给出表达式的值。 对于错误的表达式,给出出错位置。 四、实验方法 采用LR分析法。 首先给出S-属性文法的定义(为简便起见,每个文法符号只设置一个综合属性,即该文法符号所代表的表达式的值。属性文法的定义可参照书137页表6.1),并将其改造成用LR分析实现时的语义分析动作(可参照书145页表6.5)。 接下来给出LR分析表。 然后程序的具体实现: ● LR分析表可用二维数组(或其他)实现。 ●添加一个val栈作为语义分析实现的工具。 ●编写总控程序,实现语法分析和语义分析的过程。 注:对于整数的识别可以借助实验1。 五、文法定义 简单的表达式文法如下: (1)E->E+T (2)E->E-T (3)E->T

(4)T->T*F (5)T->T/F (6)T->F (7)F->(E) (8)F->i 状态ACTION(动作)GOTO(转换) i + - * / ( ) # E T F 0 S5 S4 1 2 3 1 S6 S1 2 acc 2 R 3 R3 S7 S13 R3 R3 3 R6 R6 R6 R6 R6 R6 4 S 5 S4 8 2 3 5 R8 R8 R8 R8 R8 R8 6 S5 S4 9 3 7 S5 S4 10 8 S6 R12 S11 9 R1 R1 S7 S13 R1 R1 10 R4 R4 R4 R4 R4 R4 11 R7 R7 R7 R7 R7 R7 12 S5 S4 14 3 13 S5 S4 15 14 R2 R2 S7 S13 R2 R2 15 R5 R5 R5 R5 R5 R5 五、处理程序例和处理结果例 示例1:20133191*(20133191+3191)+ 3191#

安徽大学操作系统期末试题(含答案)

安徽大学操作系统期末考试(A) 1、文件系统的主要组成部分是( D ) A、文件控制块及文件 B、I/O文件及块设备文件 C、系统文件及用户文件 D、文件及管理文件的软件 2、实现进程互斥可采用的方法(C) A、中断 B、查询 C、开锁和关锁 D、按键处理 3、某页式管理系统中,地址寄存器的低9位表示页内地址,则页面大小为(B) A、1024字节 B、512字节 C、1024K D、512K 4、串联文件适合于(B)存取 A、直接 B、顺序 C、索引 D、随机 5、进程的同步与互斥是由于程序的(D )引起的 A、顺序执行 B、长短不同 C、信号量 D、并发执行 6、信号量的值(D ) A、总是为正 B、总是为负 C、总是为0 D、可以为负整数 7、多道程序的实质是(B) A、程序的顺序执行 B、程序的并发执行 C、多个处理机同时执行 D、用户程序和系统程序交叉执行 8、虚拟存储器最基本的特征是(A) A、从逻辑上扩充内存容量 B、提高内存利用率 C、驻留性 D、固定性 9、飞机定票系统是一个(A ) A、实时系统 B、批处理系统 C、通用系统 D、分时系统 10、操作系统中,被调度和分派资源的基本单位,并可独立执行的实体是(C) A、线程 B、程序 C、进程 D、指令 二、名词解释(每小题3分,共15分) 1.死锁: 多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程将永远不能再向前推进 2.原子操作: 一个操作中的所有动作要么全做,要么全不做,它是一个不可分割的操作。 3.临界区: 在每个进程中访问临界资源的那段代码 4.虚拟存储器: 是指仅把作业的一部分装入内存便可运行作业的存储器系统。也即是具有请求调入功能和置换功 能,能从逻辑上进行扩充的一种存储系统。 5.文件系统: 是指含有大量的文件及其属性的说明,对文件进行操纵和管理的软件,以及向用户提供的使用文件 的接口等的集合 三、判断改错题(判断正误,并改正错误,每小题2分,共20分) 1、通道是通过通道程序来对I/O设备进行控制的。(T) 2、请求页式管理系统中,既可以减少外零头,又可以减少内零头。() 3、操作系统中系统调用越多,系统功能就越强,用户使用越复杂。() 4、一个进程可以挂起自已,也可以激活自已。(T ) 5、虚拟存储器的最大容量是由磁盘空间决定的。() 6、单级文件目录可以解决文件的重名问题。() 7、进程调度只有一种方式:剥夺方式。() 8、程序的顺度执行具有顺序性,封闭性和不可再现性。() 9、并行是指两个或多个事件在同一时间间隔内发生,而并发性是指两个或多个事件在同一时刻发生。() 10、进程控制一般都由操作系统内核来实现。() 四、简答题(每小题5分,共25分) 3、简述死锁产生的原因及必要条件。 答:死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程将永远不能再向前推进。产生死锁的原因可归结为两点: (1)争资源。 (2)进程推进顺序非法。 在具备下述四个必要条件时,就会产生死锁。 (1)互斥条件 (2)请求和保持条件 (3)不剥夺条件 (4)环路等待条件 4、什么是多道程序技术,它带来了什么好处? 答:多道程序技术即是指在内存中存放多道作业,运行结束或出错,自动调度内存中另一道作业运行。多道程序主要优点如下: (1)资源利用率高。由于内存中装入了多道程序,使它们共享资源,保持系统资源处于忙碌状态,从而使

编译原理实验报告总结

学年第学期《编译原理》实验报告 学院(系):计算机科学与工程学院 班级:11303070A 学号:11303070*** 姓名:无名氏 指导教师:保密式 时间:2016 年7 月

目录 1.实验目的 (1) 2.实验内容及要求 (1) 3.实验方案设计 (1) 3.1 编译系统原理介绍 (1) 3.1.1 编译程序介绍 (2) 3.1.2 对所写编译程序的源语言的描述 (2) 3.2 词法分析程序的设计 (3) 3.3 语法分析程序设计 (4) 3.4 语义分析和中间代码生成程序的设计 (4) 4. 结果及测试分析 (4) 4.1软件运行环境及限制 (4) 4.2测试数据说明 (5) 4.3运行结果及功能说明 (5) 5.总结及心得体会 (7)

1.实验目的 根据Sample语言或者自定义的某种语言,设计该语言的编译前端。包括词法分析,语法分析、语义分析及中间代码生成部分。 2.实验内容及要求 (1)词法分析器 输入源程序,输出对应的token表,符号表和词法错误信息。按规则拼单词,并转换成二元形式;滤掉空白符,跳过注释、换行符及一些无用的符号;进行行列计数,用于指出出错的行列号,并复制出错部分;列表打印源程序;发现并定位词法错误; (2)语法分析器 输入token串,通过语法分析,寻找其中的语法错误。要求能实现Sample 语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while语句、do while语句等。 (3)语义分析和中间代码生成 输入token串,进行语义分析,修改符号表,寻找其中的语义错误,并生 成中间代码。要求能实现Sample语言或自定义语言中几种最常见的、基本的语法单位的分析:算术表达式、布尔表达式、赋值语句、if语句、for语句、while 语句、do while语句等。 实验要求:功能相对完善,有输入、输出描述,有测试数据,并介绍不足。3.实验方案设计 3.1 编译系统原理介绍 编译器逐行扫描高级语言程序源程序,编译的过程如下: (1).词法分析 识别关键字、字面量、标识符(变量名、数据名)、运算符、注释行(给人看的,一般不处理)、特殊符号(续行、语句结束、数组)等六类符号,分别归类等待处理。 (2).语法分析 一个语句看作一串记号(Token)流,由语法分析器进行处理。按照语言的文法检查判定是否是合乎语法的句子。如果是合法句子就以内部格式保存,否则报错。直至检查完整个程序。 (3).语义分析 语义分析器对各句子的语法做检查:运算符两边类型是否相兼容;该做哪些类型转换(例如,实数向整数赋值要"取整");控制转移是否到不该去的地方;是

编译原理语法分析器实验

语法分析器的设计 一、实验内容 语法分析程序用LL(1)语法分析方法。首先输入定义好的文法书写文件(所用的文法可以用LL(1)分析),先求出所输入的文法的每个非终结符是否能推出空,再分别计算非终结符号的FIRST集合,每个非终结符号的FOLLOW集合,以及每个规则的SELECT集合,并判断任意一个非终结符号的任意两个规则的SELECT 集的交集是不是都为空,如果是,则输入文法符合LL(1)文法,可以进行分析。对于文法: G[E]: E->E+T|T T->T*F|F F->i|(E) 分析句子i+i*i是否符合文法。 二、基本思想 1、语法分析器实现 语法分析是编译过程的核心部分,它的主要任务是按照程序的语法规则,从由词法分析输出的源程序符号串中识别出各类语法成分,同时进行词法检查,为语义分析和代码生成作准备。这里采用自顶向下的LL(1)分析方法。 语法分析程序的流程图如图5-4所示。 语法分析程序流程图 该程序可分为如下几步: (1)读入文法 (2)判断正误 (3)若无误,判断是否为LL(1)文法 (4)若是,构造分析表; (5)由句型判别算法判断输入符号串是为该文法的句型。 三、核心思想 该分析程序有15部分组成: (1)首先定义各种需要用到的常量和变量;

(2)判断一个字符是否在指定字符串中; (3)读入一个文法; (4)将单个符号或符号串并入另一符号串; (5)求所有能直接推出&的符号; (6)求某一符号能否推出‘& ’; (7)判断读入的文法是否正确; (8)求单个符号的FIRST; (9)求各产生式右部的FIRST; (10)求各产生式左部的FOLLOW; (11)判断读入文法是否为一个LL(1)文法; (12)构造分析表M; (13)句型判别算法; (14)一个用户调用函数; (15)主函数; 下面是其中几部分程序段的算法思想: 1、求能推出空的非终结符集 Ⅰ、实例中求直接推出空的empty集的算法描述如下: void emp(char c){ 参数c为空符号 char temp[10];定义临时数组 int i; for(i=0;i<=count-1;i++)从文法的第一个产生式开始查找 { if 产生式右部第一个符号是空符号并且右部长度为1, then将该条产生式左部符号保存在临时数组temp中 将临时数组中的元素合并到记录可推出&符号的数组empty中。 } Ⅱ、求某一符号能否推出'&' int _emp(char c) { //若能推出&,返回1;否则,返回0 int i,j,k,result=1,mark=0; char temp[20]; temp[0]=c; temp[1]='\0'; 存放到一个临时数组empt里,标识此字符已查找其是否可推出空字 如果c在可直接推出空字的empty[]中,返回1 for(i=0;;i++) { if(i==count) return(0); 找一个左部为c的产生式 j=strlen(right[i]); //j为c所在产生式右部的长度 if 右部长度为1且右部第一个字符在empty[]中. then返回1(A->B,B可推出空) if 右部长度为1但第一个字符为终结符,then 返回0(A->a,a为终结符) else

安徽大学12-13操作系统B卷

安徽大学20 12 —20 13学年第 一 学期 《操作系统》考试试卷(B 卷) (闭卷 时间120分钟) 考场登记表序号 一、选择题(每小题2分,共18分) 1、______不是基本的操作系统。 A .批处理操作系统 B .分时操作系统 C .实时操作系统 D .网络操作系统 2、若有4个进程共享同一程序段,而且每次最多允许3个进程进入该程序段,则信号量的变化范围是( )。 A. 3,2,1,0 B. 3,2,1,0,-1 C. 4,3,2,1,0 D. 2,1,0,-1,-2 3、下列文件物理结构中,适合随机访问且易于文件扩展的是 。 A .连续结构 B .索引结构 C .链式结构且磁盘块定长 D .链式结构且磁盘块变长 4、产生死锁的四个必要条件中, 是不可摒弃的。 A .互斥条件 B .环路等待条件 C .不剥夺条件 D .请求和保持条件 5、某段表的内容如下图所示,现执行某条指令Load 1, 2/154,逻辑地址2/154(其中段号为2,段内地址为154),它对应的物理地址为( )。 院/系 年级 专业 姓名 学号 答 题 勿 超 装 订 线 - --------- - - --- -- - - - -- -- - - - -- - 装 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - 订 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 线- -- -- - -- ---- --- -- --- -- -- - -- -- -- - -- -- --- -

编 译 原 理 实 验 报 告

编译原理实验报告 课程:编译原理 系别:计算机系 班级:11网络 姓名:王佳明 学号:110912049 教师:刘老师 实验小组:第二组 1

实验一熟悉C程序开发环境、进行简单程序的调试 实验目的: 1、初步了解vc++6.0环境; 2、熟悉掌握调试c程序的步骤: 实验内容: 1、输入下列程序,练习Turbo C 程序的编辑、编译、运行。 #include main() { printf(“Programming is fun.\n”); } 2、分析程序,预测其运行结果,并上机检测你的预测。 #include main() { printf(“*\n”); printf(“* * *\n”); printf(“* * * * *\n”); printf(“* * * * * * *\n”); } 3、下面是一个加法程序,程序运行时等待用户从键盘输入两个整数,然后求出它们的和并输出。观察运行结果(程序输出),上机验证该程序。 #include main() { int a,b,c; printf(“Please input a,b:”); scanf(“%d,%d”,&a,&b); c=a+b; printf(“%d+%d=%d\n”,a,b,c); } 2

实验二词法分析器 一、实验目的: 设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。 二、实验要求: 1.对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。 2.本程序自行规定: (1)关键字"begin","end","if","then","else","while","write","read", "do", "call","const","char","until","procedure","repeat" (2)运算符:"+","-","*","/","=" (3)界符:"{","}","[","]",";",",",".","(",")",":" (4)其他标记如字符串,表示以字母开头的标识符。 (5)空格、回车、换行符跳过。 在屏幕上显示如下: ( 1 , 无符号整数) ( begin , 关键字) ( if , 关键字) ( +, 运算符) ( ;, 界符) ( a , 普通标识符) 三、使用环境: Windows下的visual c++6.0; 四、调试程序: 1.举例说明文件位置:f:、、11.txt目标程序如下: begin x:=9 if x>0 then x:=x+1; while a:=0 do 3

LR(0)文法

编译原理实验报告 实验名称:LR(0)文法分析 实验时间:2011年12月1号 院系:安徽大学江淮学院计算机科学与电子技术系 班级:计算机科学与技术(2)班 学号:JB094170、JB094172、JB094180、JB094188、JB094216 姓名:常文静、赵婷婷、连梦莹、陈绵慧、陈亚男 一、实验目的: 输入:任意的压缩了的上下文无关文法。 输出:相应的LR(0)分析表。 二、实验原理: 对于LR文法,我们可以自动构造相应的LR分析表。为了构造LR分析表,我们需要定义一个重要概念——文法的规范句型“活前缀”。 这种句柄之后不含任何符号的前缀称为活前缀。 在LR分析工作过程中的任何时候,栈里的文法符号(自栈底而上)X1X2…X m应该构成活前缀,把输入串的剩余部分配上之后即应成为规范句型(如果整个输入串确实构成一个句子)。因此,只要输入串的已扫描部分保持可归约成一个活前缀,那就意味着所扫描过的部分没有错误。 对于一个文法G,我们可以构造一个有限自动机,它能识别G的所有活前缀,然后把这个自动机转变成LR分析表,按照该LR分析表进行LR分析,就能保证在分析的过程中,如果分析的句子是正确的,栈里的文法符号(自栈底而上)始终构成活前缀。 假若一个文法G的拓广文法G 的活前缀识别自动机中的每个状态(项目集)不存在下述情况:(1)既含移进项目又含归约项目;(2)含有多个归约项目,则称G是一个LR(0)文法。该自动机的状态集合即为该文法的LR(0)项目集规范族。 构造识别文法活前缀DFA有3种方法: (1)根据形式定义求出活前缀的正则表达式,然后由此正则表达式构造NFA 再确定为DFA; (2)求出文法的所有项目,按一定规则构造识别活前缀的NFA再确定化为DFA; (3)使用闭包函数(CLOSURE)和转向函数(GO(I,X))构造文法G’的LR(0)

编译原理实验报告

《编译原理》 实验报告 姓名:余同庆 班级:软件1005班 学号: 3902100509 日期: 2012-6-7 中南大学软件学院 2012年06月

第一部分词法分析 词法分析程序设计与实现 一、实验目的 加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。 二、实验内容 自定义一种程序设计语言,或者选择已有的一种高级语言,编制它的词法分析程序。词法分析程序的实现可以采用任何一种编程语言和编程工具。 从输入的源程序中,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、界符。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示) 三、实验要求 1.对单词的构词规则有明确的定义; 2.编写的分析程序能够正确识别源程序中的单词符号; 3.识别出的单词以<种别码,值>的形式保存在符号表中,正确设计和维护 符号表; 4.对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误 提示,保证顺利完成整个源程序的词法分析; 四、程序设计思路 这里以开始定义的C语言子集的源程序作为词法分析程序的输入数据。在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查、填适当的信息表。经过词法分析后,源程序字符串(源程序的外部表示)被翻译成具有等长信息的单词串(源程序的内部表示),并产生两个表格:常数表和标识符表,它们分别包含了源程序中的所有常数和所有标识符。 1.定义部分:定义常量、变量、数据结构。 2.初始化:从文件将源程序全部输入到字符缓冲区中。 3.取单词前:去掉多余空白。 4.取单词:利用实验一的成果读出单词的每一个字符,组成单词,分析类

安徽大学-834-2014-真题

安徽大学2014年硕士研究生入学考试试题 计算机专业基础(数据结构、操作系统)——手打版,绝对真实哦 操作系统(75分) 一、单选题(每题2分,共20分) 1、___不是基本的操作系统。 A.批处理操作系统 B.分时操作系统 C.实时操作系统 D.网络操作系统 2、在计算机系统中,通常把财务管理程序看作是____。 A.系统软件 B.支援软件 C.借口软件 D.应用软件 3、进程所请求的一次打印输出结束后,将使进程状态从___。 A.运行态变为就绪态 B.运行态变为阻塞态 C.就绪态变为运行态 D.阻碍态变为就绪态 4、进程在执行中状态会发生变化,不可能出现的状态变化情况是____。 A.运行变为就绪 B.运行变为阻塞 C.阻塞变为就绪 D.阻塞变为运行 5、若在一个单处理器的计算机系统中同时存在5个并发进程,则任何时刻允许占用处理器的进程数为____。 A.至少1个 B.最多1个 C.至少5个 D.最多5个 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、扩大物理外存容量 二、填空题(7*2=14分) 1、UNIX系统中,文件贮存器的管理采用的是_________。 2、一个文件系统的组织方式与MS-DOS相似,在FA T中可有32K个指针,磁盘的盘块大小为1K,则其能指引的最大逻辑磁盘容量为_____________M bytes。 3、某操作系统的磁盘文件空间共有2000块,若字长为64位的位示图管理磁盘空间,位示图需要____________字。 4、在响应比优先的作业调度算法中,当各个作业等待时间相同时,_____________的作业将得到优先调度;当各个作业要求的运行时间相同时,_____________的作业将得到优先调度。 5、若段氏存储管理中供用户使用的逻辑地址为24位,其中段内地址占用16位,则用户程序最多可为_______段。当把程序装入主存时,每段占用主存的最大连续区为_________字节。 三、判断题(7*2=14分) 1、设在某时刻,系统存在安全序列,现在p2请求资源,若其请求不超过p2的需求和系统可用资源数量,则可以给p2分配资源,不会引起死锁。

相关文档
最新文档