荟聚奇文、博采众长、见贤思齐
当前位置:公文素材库 > 计划总结 > 工作总结 > 夏彦 一周工作总结

夏彦 一周工作总结

网站:公文素材库 | 时间:2019-05-27 18:50:55 | 移动端:夏彦 一周工作总结

夏彦 一周工作总结

大连汽车广场有限公司

工作总结

在这一周主要工作是进行系统测试,其次是应对领导的检查。

每天早上在早会要对前一天发现的问题进行总结,并汇报前一天的纪律情况;随后需要对交易大厅进行清洁打扫,保证大厅地面的干净;其次每天在测试前需要拿KEY,检查维护端的数据是否需要重新导入,如果需要导入要检查当前竞拍的车辆是否都是流拍或是成交,KEY不可以有插在电脑上的情况,保证数据成功导入;维持每天测试的纪律,保证每天都能够检查出BUG,下午下班之前及时将问题交给梁楠楠。在周三对财政王主管进行了维护端的讲解。在周四我们对交易大厅进行了一次彻底的清扫,来迎接大连电视台的来访。以上就是本周工作的主要内容。

扩展阅读:课程设计 夏彦

编译原理设计说明

衡阳师范学院

计算机科学与技术专业

课程设计

题目:PL/X编译程序改进及扩展指导教师:徐雨明老师年级班别:08级1班学号:08190123学生姓名:夏彦时间:201*年6月16日

1

编译原理设计说明

目录

1介绍..................................................31.1前言................................................32编译器................................................42.1PL/X编译器结构概述.................................42.2语法元素............................................62.3语法图..............................................72.4判断是否符合两条限制规则...........................152.5语法出错表定义.....................................183虚拟机...............................................193.1虚拟机组织结构.....................................193.2虚拟机指令格式.....................................204程序设计.............................................234.1全局变量、全局常量.................................234.2函数接口...........................................305程序测试.............................................396课程设计总结.........................................407参考文献.............................................41

2

编译原理设计说明

1介绍

1.1前言

根据课程设计要求制作PL/X语言的编译器,完成词法分析、语法分析、语义分析及代码生成、出错处理和解释运行程序,并添加一定的扩展,最终实现一个PL/X的编译器。

所完成扩展点说明:1)支持三种注释a)单行注释b)/*---*/多行注释c)(*---*)多行注释

2)支持read语句,因此可从终端获取输入3)支持write语句,因此可从终端输出4)支持for语句5)支持do…while语句6)call过程7)求余运算%8)整数的奇偶odd

3

编译原理设计说明

9)幂运行**10)求阶乘!11)求和$

关于出错处理:分为词法分析错误、句法分析错误、运行时错误(如除数为0)

允许变量名或函数名重复,但访问的时候以最后一次声明的为有效

2编译器

2.1PL/X编译器结构概述

图1PL/X编译程序的结构图

图2PL/X的解释执行结构

4

编译原理设计说明

图3PL/X编译程序总体流程图

语法分析过程PROG是整个编译过程的核心,是指开始由主程序调用GETSYM取一个单词,再调用语法分析过程PROG,PROG由当前单词根据语法规则再调用其它过程,如说明处理、代码生成或出错处理等过程进行分析,当分析完一个单词后,PROG再调用GETSYM取下一个单词,一直重复到当前单词为结束符"."表明源程序已分析结束。若未取到结束符".",而源程序已没有输入符号,这时表明源程序有错误,无法再继续分析。

5

编译原理设计说明

图4PL/X过程调用相关示意图

2.2语法元素关键字:

"and","begin","call","case","constant","do","else","end","false","for","if","integer","logical","not","or",“odd”,"procedure","program","read","repeat","switch","then","true","until","while","write"

6

编译原理设计说明

操作符:

".",";","**","++",“--","+","-","*","/","%","=","=","==","!","+=","-=","*=","/="2.3语法图

程序

程序体

程序体.const,;var,ident=numberident;procedureident;;程序体语句编译原理

语句序列语句条件

设计说明

语句;ident:=表达式callidentbegin语句序列endif条件then语句while条件do语句odd表达式表达式=<>=表达式编译原理

表达式项因子

设计说明

+项-+-项因子*/**%因子++--identnumber(表达式)编译原理

设计说明

1)prog="program"ds{proc}"begin"ss"end""."

2)proc="procedure"aident[ds]"begin"ss"end"

3)ds=d{";"d}

4)d="integer"aident{","aident}|

"logical"bident{","bident}|

"constant"aident"="number{","aident"="number}

10

编译原理设计说明

5)ss=s{;s}

6)s=aident":="ae|bident":="be|

"if"be"then"ss["else"ss]"end"|"while"be"do"ss"end"|"repeat"ss"until"be|"write"ae."read"aident|bident"for"s;be;s"do"ss"end"

11

编译原理设计说明

"call"procedure

"do"ss".""while"be"end"

7)ae=["-"]at{("-"|"+")at}

8)at=af1{("*"|"/")af1}.

编译原理设计说明

9)af1=af{("%"|"**")af}.//扩展的求余运算

10)af=aident|number|"("ae")"|constant

11)be=bt{"or"bt}

编译原理设计说明

12)bt=bf{"and"bf}

13)bf=bident|"true"|"false"|"not"bf|"("be")"|re1

14)re1=oddre

编译原理设计说明

15)re=(aident|number)("="|">"|">="|"编译原理设计说明

Follow(B1)={“begin”};B3={";"d}First(B3)={“;”};

Follow(B3)={“procedure”,“begin”};B4={","aident}First(B4)={“,”};

Follow(B4)={“;”,“procedure”,“begin”};B5={","bident}First(B5)={“,”};

Follow(B5)={“;”,“procedure”,“begin”};B6={","aident"="number}First(B6)={“,”};

Follow(B6)={“;”,“procedure”,“begin”};B7={;s}First(B7)={“;”};

Follow(B7)={“end”,“until”,“else”};B8=["else"ss]First(B8)={“else”};Follow(B8)={“end”};B9=["-"]First(B9)={“-”};

Follow(B9)={“(”,“aident”,“number”,“constant”};

16

编译原理设计说明

B10={("-"|"+")at}First(B10)={“-”,“+”};

Follow(B10)={“end”,“until”,“else”,“)”,“and”,“or”};B11={"or"bt}First(B11)={“or”};

Follow(B11)={“then”,“do”,“;”,“)”,“end”,“until”,“else”};B12={("*"|"/")af}First(B12)={"*","/"};

Follow(B12)={“+”,“-“,“end”,“until”,“else”,“)”,“and”,“or”};B13={"and"bf}First(B13)={"and”};

Follow(B13)={“or”,“then”,“do”,“;”,“)”,“end”,“until”,“else”};

2).判断是否符合两条限制规则

规则1:找出图中每一个分支点,考察每个分支点的各个分支的头符号是否相异

规则2:找出图中每一个结构,考察每个结构的头符号集合与其跟随符号是否相异非终结符名分程序

开始符号集合constvarprocedureidentifcall17

后继符号集合.;编译原理设计说明

beginwhilereadwrite语句条件identnumber+-(表达式identnumberropendthendo.;)项identnumber(rop+-endthendo.;+因子identnumber(-*/end","p":{"h":22.449,"w":40.982,"x":595.23,"y":编译原理设计说明

3虚拟机

3.1虚拟机组织结构

程序存储器指令存储器数据存储区

程序地址寄存器基本地址寄存器地址寄存器

1)程序存储器指令类型enumfct{lit,opr,};指令

typedefstructinstruction{fctf;intl;inta;Int,jmp,jpc

lod,

sto,cal,

}Instruction;指令数组

Instructioncode[InMax];

19

编译原理设计说明

2)指令寄存器inti;3)数据存储器intstack[StMax]4)程序地址寄存器intp;

5)基本地址寄存器intb;6)地址寄存器intt;

3.2虚拟机指令格式

编译程序所产生的目标代码是一个假想栈式计算机的汇编语言,可称为类PCODE指令代码,它不依赖任何具体计算机,其指令集极为简单,指令格式也很单纯,其格式如下:

fla其中f代表功能码,l表示层次差,也就是变量或过程被引用的分程序与说明该变量或过程的分程序之间的层次差。a的含意对不同的指令有所区别,对存取指令表示位移量,而对其它的指令则分别有不同的含义,见下面对每条指令的解释说明。

20

编译原理设计说明

目标指令有8条:

①LIT:将常量值取到运行栈顶。a域为常数值。

②LOD:将变量放到栈顶。a域为变量在所说明层中的相对位置,l为调用层与说明层的层差值。

③STO:将栈顶的内容送入某变量单元中。a,l域的含意同LOD指令。

④CAL:调用过程的指令。a为被调用过程的目标程序入口地址,l为层差。

⑤INT:为被调用的过程(或主程序)在运行栈中开辟数据区。a域为开辟的单元个数。

⑥JMP:无条件转移指令,a为转向地址。

⑦JPC:条件转移指令,当栈顶的布尔值为非真时,转向a域的地址,否则顺序执行。

⑧OPR:关系运算和算术运算指令。将栈顶和次栈顶的内容进行运算,结果存放在次栈顶,此外还可以是读写等特殊功能的指令,具体操作由a域值给出。(详见解释执行程序)。

指令功能表LIT0aLODlaSTOla将常数值取到栈顶,a为常数值将变量值取到栈顶,a为偏移量,l为层差将栈顶内容送入某变量单元中,a为偏移量,l为层差

编译原理设计说明

CALlaINT0aJMP0aJPC0a调用过程,a为过程地址,l为层差在运行栈中为被调用的过程开辟a个单元的数据区无条件跳转至a地址条件跳转,当栈顶布尔值非真则跳转至a地址,否则顺序执行OPR00OPR01OPR02OPR03OPR04OPR05过程调用结束后,返回调用点并退栈栈顶元素取反次栈顶与栈顶相加,退两个栈元素,结果值进栈次栈顶减去栈顶,退两个栈元素,结果值进栈次栈顶乘以栈顶,退两个栈元素,结果值进栈次栈顶除以栈顶,退两个栈元素,结果值进栈增加了除数为0的判断OPR06OPR07OPR08OPR09OPR010OPR011OPR012OPR013OPR014

栈顶元素的奇偶判断,结果值在栈顶次栈顶与栈顶是否相等,退两个栈元素,结果值进栈次栈顶与栈顶是否不等,退两个栈元素,结果值进栈次栈顶是否小于栈顶,退两个栈元素,结果值进栈次栈顶是否大于等于栈顶,退两个栈元素,结果值进栈次栈顶是否大于栈顶,退两个栈元素,结果值进栈次栈顶是否小于等于栈顶,退两个栈元素,结果值进栈栈顶值输出至屏幕22

编译原理设计说明

OPR015屏幕输出换行OPR016OPR017OPR018

从命令行读入一个输入置于栈顶扩展求余扩展求幂4程序设计

4.1全局变量、全局常量

#defineNumber26//保留字的个数#defineTXMAX100//标识符表的长度#defineInMax200//指令最多条数#defineLeMax3//过程最大嵌套层次#defineStMax500//最大栈长#defineIMax10//标识符最长长度#defineDMax14//数字允许的最长位数v#defineAddMax2048//最大地址

charch;//最近一次从程序中读出的字符charsym[IMax];//最近读出的符号charid[IMax];//最近读出的标识符intnum;//最近读出的数值intcc;//行缓冲区指针

23

编译原理设计说明

intll;//行缓冲区长度intkk;//提高性能charline[100];//行缓冲区

chara[IMax];//存放当前正在分析的词intlineno;//当前分析的行号inttx=0;//符号表序号intindex;//指令索引

charssym[13][IMax];//符号对应的符号表charfsym[33][IMax];//用于出错处理interr;//记录错误数量intstack[StMax];

FILE*file;//指向要编译的源文件

charword[Number][IMax]={//保留字"and","begin","call","case","constant","do","else","end",

24

编译原理设计说明

"false","for","if","integer","logical","not","or","odd","procedure","program","read","repeat","switch","then","true","until","while","write"};

charwsym[Number][IMax]={//保留字对应的符号表"andsym",

25

编译原理设计说明

"beginsym","callsym","casesym","constsym","dosym","elsesym","endsym","falsesym","forsym","ifsym","intesym","logisym","notsym","orsym","oddsym","procsym","progsym","readsym","repeasym","switcsym","thensym","truesym",

26

编译原理设计说明

"untilsym","whilesym","writesym"};

charD_first[4][IMax]={//声明语句头符号集"intesym","logisym","constant","over"};

charD_follow[3][IMax]={//声明语句跟随符号集"beginsym","procsym","over"};

charS_first[11][IMax]={//语句的头符号集"adient",

27

编译原理设计说明

"ifsym","whilesym","repeasym","writesym","forsym","callsym","readsym","dosym","switcsym","over"};

charS_follow[7][IMax]={//语句的跟随符号集"endsym","elsesym","untilsym","dosym","period","over"};

28

编译原理设计说明

enumfct{//指令类型lit,opr,lod,sto,cal,Int,jmp,jpc};

enumobjekt{//标识符类型integer,logical,procedure,constant};

typedefstructinstruction{fctf;intl;inta;

29

编译原理设计说明

}Instruction;

Instructioncode[InMax];//指令数组

typedefstructTable{//符号表定义charname[IMax];objektkind;intadr;intlevel;intsize;}Table;

Tabletable[TXMAX];//符号表

4.2函数接口函数原型参数描述函数描述返回值函数原型

voidgetch()从源文件中读取字符voidgetsym()30

编译原理设计说明

参数描述函数描述返回值函数原型参数描述函数描述返回值函数原型参数描述函数描述返回值函数原型参数描述从源文件中取出字符串voidinit()初始化ssymvoidError(char*s1)s1:出错信息打印错误voidenter(objekttype,int*pdx,intlev)type:符号类型pdx:当前层次偏移量lev:符号层次函数描述返回值

符号记入符号表函数原型参数描述编译原理函数描述函数原型返回值参数描述函数描述返回值函数原型参数描述函数描述返回值函数原型参数描述函数描述返回值函数原型参数描述intposition(char*id)id:所查询的符号设计说明在符号表中查询符号boolIsIn(chars1[][IMax])id在符号表中序号,返回-1表示不存在s1符号字符串数组检查当前符号是否在期望符号集合中true::在false:不在boolss(intlev)lev:当前层次ss=s{;s}voidUnion(chars1[][IMax],chars2[][IMax])S1,s2为要合并的字符串数组用于出错处理:合并开始符与跟随符集合voidtest(chars1[][AL],chars2[][AL],char*err)S1:此程序段的跟随符集合S2:此程序段的开始符集合err:错误信息

编译原理设计说明

函数描述当前符号是否在期望符号集中,否则报错并跳过返回值函数原型参数描述voidgen(fctx,inty,intz)x:指令名y,z:指令对应参数函数描述返回值函数原型参数描述函数描述返回值函数原型参数描述函数描述返回值

生成指令boolprog()prog="program"ds{proc}"begin"ss"end""."boolproc(intlev)lev:此过程层次proc="procedure"aident[ds]"begin"ss"end"编译原理设计说明

函数原型参数描述boolds(int*pdx,intlev)pdx:当前层次偏移量lev:当前层次函数描述返回值函数原型参数描述boold(int*pdx,intlev)pdx:当前层次偏移量lev:当前层次函数描述d="integer"aident{","aident}|"logical"bident{","bident}|"constant"aident"="number{","aident"="number}返回值

ds=d{";"d}

编译原理设计说明

函数原型参数描述函数描述bools(intlev)lev:当前层次aident":="ae|bident":="be|"if"be"then"ss["else"ss]"end"|"while"be"do"ss"end"|"repeat"ss"until"be|"write"ae."read"aident|bident"for"s;be;s"do"ss"end""call"aident"do"ss".""while"be"end"返回值函数原型参数描述函数描述返回值函数原型参数描述

boolae(intlev)lev:当前层次ae=["-"]at{("-"|"+")at}boolat(intlev)lev:当前层次35

编译原理设计说明

函数描述返回值函数原型参数描述函数描述返回值函数原型参数描述函数描述返回值函数原型参数描述函数描述返回值函数原型参数描述函数描述at=af1{("*"|"/")af1}boolaf1(intlev)lev:当前层次af1=af{("**"|"%")af}boolaf(intlev)lev:当前层次af=aident|number|"("ae")"|constantboolbe(intlev)lev:当前层次bt{"or"bt}boolbt(intlev)lev:当前层次bt=bf{"and"bf}

编译原理设计说明

返回值函数原型参数描述函数描述boolbf(intlev)lev:当前层次bf=bident|"true"|"false"|"not"bf|"("be")"|re1返回值函数原型参数描述函数描述返回值函数原型参数描述函数描述boolre1(intlev)lev:当前层次re1=oddreboolre(intlev)lev:当前层次re=(aident|number)("="|">"|">="|"编译原理设计说明

函数原型参数描述函数描述返回值函数原型参数描述函数描述返回值函数原型参数描述voidlistall()显示所有的指令voidinterpret()解释程序intbase(intl,intb)l:当前层次b:当前基址函数描述返回值

寻找符号所在层次基址编译原理设计说明

5程序测试

1)右移

在词法分析的voidgetsym()函数中添加:strcpy(sym,"shr");getch();}elsestrcpy(sym,"gtr");//检测>符号在语法和语义分析的boolaf(intlev)函数中添加:if(strcmp(sym,"shr")==0){getsym();gen(lit,0,num);gen(opr,0,23);//shroperatinggetsym();}

在解释程序中添加:case23://shrt--;stack[t]=(stack[t]>>stack[t+1]);BreakTest1:取余运算测试目标测试用例的plx源程序语法分析代码生成解释程序右移运算//shrprogramintegerj,rbeginj:=257;writej;r:=j>>5;writerend.测编译此程序试查看输出步骤

编译原理

测试结果设计说明

6课程设计总结

通过这次课程设计,我终于明白了做一个编译器的是多么的不容易。每一条语句都需要那么多的考虑,每执行一条语句需要做的是很多的指令。我做这个程序的时候遇到了很多困难,是我以前没有遇到过的。

在自己的思考及老师,同学的帮助下扩充了右移运算的功能,

因水平和时间有限,目前也只能扩充这一个功能了。

40

编译原理设计说明

7参考文献

[1]严蔚敏,吴伟国.数据结构.北京:清华大学出版社,201*

[2]陈火旺,刘春林等.程序设计语言编译原理(第3版).北京:国防工业出版社,201*[3]网络资料

友情提示:本文中关于《夏彦 一周工作总结》给出的范例仅供您参考拓展思维使用,夏彦 一周工作总结:该篇文章建议您自主创作。

来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


夏彦 一周工作总结》由互联网用户整理提供,转载分享请保留原作者信息,谢谢!
链接地址:http://www.bsmz.net/gongwen/467419.html
相关文章