版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、snl编译器程序设计文档项日组长:陈亮(软件学院06级1291406006)项目组员:汤源(软件学院06级1291406)吕浩(软件学院06级1291406)李春娟(软件学院06级1291406)党雪迎(软件学院06级1291406)开发日期:2009年5月1日2009年6月21日f l 7 1 ii.3l.l编写m的.31 *2 .31.3参考资料.3第二章项目概述".42.1工作内容".42.2主要参加人员".4)nu*.42.3.1程序".42.3.2文件".42.4验收标准 2.5完成项目最迟期限""5第三章实施计划
2、 53.1接人员 3.2工作任务的分解、人物分工及进度"63.3关键问题"6第四章程序系统的结构.74.1用例图设计.74.2类图设计""84.3包图设计.94.4构件聞设计".94.5活动图设计.104.6顺序图设计.104.7状态图设计.114.8合作图设计.11第五章程序设计说明.115.1程序描述.115.2 編.125.3运行*环境.125.4类及函数说明.12第人章程序测试说明.21第七章程序开发总结.22第一章引言1.1编写目的该文档的阅读群体是该项目组的全部成员,一方血让所有成员能理解本程序 的系统结构,另一方而明确自己的分工,
3、方便在编程的过程屮合理运用。1.2背景项目名称:snl编译器项目类型:java小程序任务提出者:陈亮开发者:陈亮汤源吕浩李春娟党雪迎用户:对snl语言编译感兴趣者项目思路来源:随着社会的发展,编译器的开发程序层出不穷,如何让同学能更好的了解编 译器的工作过程呢?于是就产生了用java语言编写一个snl编译器,可以让同学们更好的理解 编译这门学科的内容,运用所学知识了解编译的过程,使所学的知识得到运用。1.3参考资料uml及建模北京清华大学出版社北京交通大学出版社 郭宁面向对象技术与工具北京电子工业出版社陈文宇0忠建0忠建编译程序的设计与实现北京高等教育出版社刘磊等网络资源:第二章项目概述2.1
4、工作内容任务名称具体内容需求分析调研报告设计,调研总结,需求分析文档书写而向对象设计而向对象的用例阁、类阁等设计程序设计程序实现功能函数的设计程序具体实现类的实现,功能函数的实现程序测试程序整体测试,用户测试,测试文档书写2.2主要参加人员项目组组长:陈亮备注:一直枳任期末大作业的项目组组长,且具有一定开发经验。项组成员:汤源吕浩李春娟党雪迎备注:汤源、吕浩:成绩优异,具省开发经验。李春娟、党雪迎:参加过面向对象网站漿构的培训,初步学structs 架构的相关知识。2.3产品2.3.1程序程序名称:snl编译器 编程语言:java 存储程序的媒体形式:硬盘存储2.3.2文件文件夹名:snlja
5、va mycompiler说明:compiler.java 主程序cifa中包禽词法分析的creattoken.javayufa屮包含语沈分析的recursion.java备注:单击test.html即可运行木程序。2.4验收标准根据上课教师对丁期末大作业的耍求,木项0做到了如下几点:1. 面句对象的设计思想,实现了词法分析的token生成、语法分析的语法树 生成和错误的检测。2. 项目组成员分工明确。2.5完成项目最迟期限本项0的最后完成期限是2009年6只21门第三章实施计划3.1接口人员木项口的接u人员为项口组组长陈亮,其主要工作以职能如下: 负责确定项0需求。负责与郑晓娟老师交流,定期
6、汇报项目的进展程度。负责与项目组其他成员联系,分配任务,协调各部门的工作。3.2工作任务的分解、人物分工及进度/>任务名称.充成'心求分析rklukiiw.也mriis丨1:也;乂4分析jf慨卜st«小籼t体成61没iiiiii1111mmmmmmmmmmhtt 体仇 h 心 m. fttfiw afrih 的ftlhhh it觼a; iv(i b曲21. 托功鼸摘l4ttmr 3ud植分析ttih 执 1i 揖t«!ftrbi kl炊分祈齣总w什 处 vhhbflu u|ia项目设计2w>-5-|2w>-5-2ovimjmljujb m.尨诚淞
7、1坊 afrtb 龙m44jul分析ttmh 法.分析aw执1j *场瀾kmjfrifrs ift注分析总权呼处:j,偷 til jium flu v.iwwlll'jc >仆蝙龙曾油 *st« :足嘗ijl认分析btuh vm lih论簿hk 次 #'j 4wc 小«成项目变现jno<w>lv1 ii 吹 i«l 执ti/b i*庳 ftrih 'ava小相.中呔!覼編ihdtjl分和 m ikb rts i 6hi>j *rjb w汰分析的aw呼 <jw.i nfa4c><. wht分uwjwl
8、j如m.從泌湖丨1扔 m 卜:l« ;ui*uij;j. :>4trtljifcah*t,. ; pi m fkh « b m、办 tt鼻 i itr: afrfb wt&4>1am<vfr i现灣 ijflfl lmjim l.rfih.i,.:,:»< h;: v;t5助wurth屮jt对曲 ftriti光婷讲认»析功 n:汽咸次 辦加人b小!till教姆项目测设2005-12ww>| o执1| 小 m.llifl ifrii njat.mij.t tr- i»i ,i jjm !: ik /j *(l
9、zx r i ?i 3,d ha ; <i k 鹅心.以助muib 1*湖令押蜎mt 曲ahk r;i:交付琐ri2ch)a*22100mn22id交付裎序代码及文科3.3关键问题影响整个项成败的关键问题及对项的影响:面向对象的思想重新设计程序。 影响:以前对于程序设计的思想还都停留在面h'd过程的思想,产生的问题是代码冗余,安全性欠缺的隐患。于是我们在原来项目的基础上进行重构,用而 向对象的思想重寻规划。对于编译程序的实现原理还需重新巩m学习。技术难点:接口的设计。token的产生。语法树的生成风险:由于程序开发周期短,程序员木身开发经验尚浅,只能完成贬义词的词法 分析和语法分
10、析部分。第四章程序系统的结构4.1用例图设计使用者调用错误显示中间代码生成4.2类图设计mywindow-text : toxtarea 十 mywindow ()buttonl:button-button:buttonlabel 1:label:text-windowl:mywindow-*indow2:mywindow-window3:mywindow一 not:gridlayout+ init 0:voidcorcpileractionporrormcd (): viodtokentokentypemaxtokbnlenint1 inenointtcmp_name穆stringfonxi
11、interror鬌booleanstree攀stringsorrorstringyufatroetreenoderecursionvoidvoidcrcattokenmaxtokenlen:int-1:intchar_num:int-1 ineno:int-tokennum:int-is:boolean-eof:boolean-error:boolean+ tok:stringcroattoken () gettokcnlist (> getnextchar <) ungetnextchar () isdigit () isalpha () reservcdlx>okup 0
12、 copy ()returntokenlist ():chainnodotypc :char :void :boolean :boolean :string :void :stringchainnodetype-token : tokcntype -nexttoken : chainnodetypeprocattr paramt : stringattrarrayattr procattr expattr -type namearrayatprocattexpattistringtokentypo1 ineshow : intlex:string-sem:stringarrayattrlow
13、叩childtype : string:int :intexpattropvalvarkindtype:string :int :string :string-child:treenodesibling:treenode-1ineno:int-nodekind:string-kind:string-idnum:int-namc:stringattr:attrtreenode十十+十十+十十+arraytype () rectype () recursion () pielddocmore 0 program 0 piogramllead ()dec larepart () typedec (&
14、gt; typcdcclarat ion 0 typedcclist () typedec.uore () typeld ()typename () basetype () structuretypc ) fielddeclist 0 idlist ()idmore 0 vardec 0 vardeclaration 0 vardeclist 0 vardecmoro 0 varldlist () varldmore () procdcc 0 procdeclaration <) procdccmoro () paramlist () paramdeclist 0 parainmore
15、()param ()formlist ()fid.more 0 procdecpart () procbody () piogrambody 0 stmlist 0 stmmore ()stra ()asscall 0 assignment rest () condi tionaistm () loops tm ()inputstm () outputstm () rcturnstm () callslinrest 0 actparainlist <) actparammore <)exp 0simple exp 0 term (> factor ()variable 0 v
16、arimore 0 fieldvar 0 fieldvarmore 0 match () syntaxerror () readnexttoken () novrnodo (> news tint node () nowexpnode 0 writestr () writespaco (> writetab () printtree ()treenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodevoidvoidvoidvoidtreenodevoidvoidtreenodetreenodetreenodetree
17、nodevoidvoidtreenodetreenodetreenodevoidtreenodetreenodetreenodevoidvoidtreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodetreenodevoidtreenodevoidtreenodevoidvoidtreenodetreenodetreenodevoid
18、voidvoidvoid4.3包图设计imp°rtmycompiler. crcattokencompilerimporti mportmycompiler. recursion4.4构件图设计定义token类览(tokentype. class)总税序处理(creattoken . java)总处押(creattoken . class)主程fuonpiler. java)主程序(compi ler. class)记义衍针(chitiitnodetype. class)ih结 的定义(treenode. c 1 hss)id泌w点k他w性(aur. class)iq求数俎类型的尿性
19、arrayattr. class)o? wj 处妁1 <kecursi<m. java)总构/y的处押(recursion, class)kl决农达式的w性(expattr . class)tokenff*列的定义(tokentype. class)窗 口控制(mywindow, clas4.5活动图设计按钮词法分析语法分析4.6顺序图设计sequence!) iagram 1操作者代码tokentoken口,yufatreeerror语法树error符号表error中间代码error4.7状态图设计gettokenlist丄token同法分析讲法分析语法树do / creatto
20、kendo / recursionku errorerror r ,词法分析结果久errorexit / error4.8合作图设计向法分window7: recursion1:文件操作者compiler2:词法分析icroattoken3:语法分析recursion6: token4: error5: error第五章程序设计说明5.1程序描述snl编译器把snl源程序编译成虚拟目标机上的目标程序(现阶段从完成y词 法分析和语法分析阶段),然后再巾解释程序对该0标程序进行解释执行,才能 得到最终的运行结果。5.2功能功能结构框图(蓝色为已完成部分,红色为未完成部分):snl源程序snl u
21、程序词法分析程序:词法分析是编译过程的第一阶段。它的任务是对输入的字符串形式的源程序 按顺序进行扫描,根据snl语言的语法规则识别兵宥独立意义的单词(符号), 并输出与其等价的token序列。语法分析程序:语法分析是编译程序的第二阶段,也是编译程序的核心部分。它的任务是, 根据snl语言的语法规则,对源程序进行语法检查,并识别出相应的语法成分。 按照snl编译程序的模型,语法分析的输入时从词法分析器输出的源程序的 token序列的形式,然后根据语言的文法规则进行分析处理,输出无语法错误 的语法成分,表示成语法树的形式。5.3运行环境硬件:个人电脑1台。操作系统类型:windows xp os。
22、应用软件:myeclipse, jdkl.6, ie浏览器等主要适合中小型java程序开发的软件。5.4类及函数说明一 compiler.java1. compiler 主函数init()结构布局actionperformed()接收操作事件的接门2. mywindow 窗体类二 creattoken.java1. tokentype 定义 token 矣型2. chainnodetype 定义指针3. creattoken总程序处理函数名 creattoken(string s)功能构造函数函数名 gettokenlist功能取得token序列函数说明函数从源文件字符申序列屮获取所有toke
23、n序列,使用确定性冇限內动 机dfa,采用直接转向法超前读字符,对保留字采用查表方式识别产生词法错误时 候,仅仅略过产生错误的字符,不加改正函数名 getnextchar功能取得下一非空字符函数说明读取一个字节的数据,到达文件尾时,eof为true函数名 ungetnextchar功能字符回退函数说明回退一个字节的数据函数名isdigit功能检查参数c是不是数字函数名isalpha功能检查参数c是不是字母函数名 reservedlookup功能保留字杳找函数说明使用线性查找,查看一个标识符是杏是保留字标识符,如果在保留字表屮 则返冋和应单词,否则返冋单词id函数名copy功能将b中的信息拷贝到
24、a.token中。函数名 returntokenlist功能将token序列输出,显示在文件屮。说明用于显示词法分析结果三 recursion.javatreenode语法树结点的定义attr id呆语法树节点其他属性arrayattr记录数组类型的属性procattr记录过程的属性exp attr记录表达式的城性tokentype token序列的定义recursion总程序的处理函数名program功能总程序的处理函数产牛式 < program > = programhead declarepart programbody .说明函数根据文法产生式,调用相应的递归处理函数,生成
25、语法树节点,语法树 的根节点的第一个了节点指向程序头部分programhead,declarapart为 programhead的兄弟节点,程序体部分programbody为declarepart的兄弟节点.函数头部分函数名 programhead功能程序头的处理函数产生式 < programhead > := program programname说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点声明部分函数名 declarepart功能声明部分的处理产生式 < declarepart > := typedec vardec procdec说明函数根据文法
26、产生式,凋用相应的递归处理函数,生成语法树节点类型声明部分函数名typedec功能类型声明部分的处理产生式 < typedec > := 8 | typedeclaration说明根据文法产生式,调用相应的递归处理函数,生成语法树节点函数名 typedeclaration功能类型声明部分的处理函数产生式 < typedeclaration::= type typedeclist说明函数根据文法产生式,调用相应的递归处理函数,生成语法树节点*/函数名 typedeclist功能类型声明部分的处理函数产生式 < typedeclist > = typeld = typ
27、ename ; typedecmore说明函数根据文法产生式,调用相应的递归处理函数,生成语法树节点函数名 typedecmore功能类型声明部分的处理函数产生式 < typedecmore::=£ | typedeclist说明函数根据文法产生式,调用相应的递归处理函数,生成语法树节点函数名typeld功能类型声明部分的处理函数 产生式 < typeld > id说明函数根据文法产生式,调用相放的递归处理函数,生成语法树节点函数名typename功能类型声明部分的处理产生式 < typename > := basetype | structuretyp
28、e | id说明函数根据文法产生式,调用相放的递归处理函数,生成语法树节点函数名basetype功能类型声明部分的处理函数产生式 < basetype:= integer | char说明函数根据文法产生式,调用相放的递归处理函数,生成语法树节点函数名 structuretype功能类型声明部分的处理函数产生式 < structuretype > := arraytype | rectype说明函数根据文法产生式,调用相放的递归处理函数,生成语法树节点函数名arraytype功能类型声明部分的处理函数产生式arraytype::= array low.top of baset
29、ype说明函数根据文法产生式,调用相放的递归处理函数,生成语法树节点 函数名rectype功能类型声明部分的处理函数产生式 < rectype:= record fielddeclist end说明函数根据文法产生式,调用相放的递归处理函数,生成语法树节点函数名 fielddeclist*/功能类型声明部分的处理函数*/产生式 < fielddeclist > := basetype idlist; fielddecmore | arraytype idlist; fielddecmore说明函数根据文法产生式,调用相应的递归处理函数,生成语法树节点函数名 fielddecm
30、ore功能类型声明部分的处理函数产生式 < fielddecmore > := 8 | fielddeclist说明函数根据文法产生式,调用相放的递归处理函数,生成语法树节点函数名idlist功能类型声明部分的处理函数产生式 < idlist >:= id idmore说明函数根据文法产生式,调用相放的递归处理函数,生成语法树节点函数名idmore功能类型声明部分的处理函数产生式 < idmore > := 8 |,idlist说明函数根据文法产生式,调用相应的递归处理函数,生成语法树节点变量声明部分函数名vardec能变量声明部分的处理产生式 < v
31、ardec > := 8 | vardeclaration说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名 vardeclaration功能变量声明部分的处理函数产生式 < vardeclaration::= var vardeclist说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名 vardeclist能变量声明部分的处理函数产生式 < vardeclist > := typename varldlist; vardecmore 说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名 vardecmore功能变量
32、声明部分的处理函数产生式 < vardecmore > := 8 | vardeclist说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名varldlist功能变量声明部分的处理函数产生式 < varldlist::= id varldmore说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名varldmore功能变量声明部分的处理函数产生式 < varldmore > := 8 |,varldlist说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点过程声明部分函数名procdec功能函数声明部分的处理产生式 &
33、lt; procdec::= 8 | procdeclaration说明函数根据文法产生式,调用相应的递归处理函数,生成语法树节点/函数名 procdeclaration功能函数声明部分的处理函数产生式 < procdeclaration > := procedure procname(paramlist);procdecpartprocbodyprocdecmore说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名 procdecmore能更多函数声明中处理函数产生式 < procdecmore > := 8 | procdeclaration说明函
34、数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名paramlist功能函数声明中参数声明部分的处理函数产生式 < paramlist::= s | paramdeclist说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名 paramdeclist功能函数声明中参数声明部分的处理函数/产生式 < paramdeclist::= param parammore说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名parammore功能函数声明中参数声明部分的处理函数产生式 < parammore > := s |; param
35、declist说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名param功能函数声明中参数声明部分的处理函数产生式 < param::= typename formlist | var typename formlis 说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名formlist功能函数声明中参数声明部分的处理函数产生式 < formlist::= id fidmore说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名fidmore功能函数声明中参数声明部分的处理函数产生式 < fidmore::=s | , fo
36、rmlist说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名 procdecpart能函数中的声明部分的处理函数产生式 < procdecpart > := declarepart说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名procbody功能函数体部分的处理函数产生式 < procbody:= programbody说明函数根据文法产生式,凋用相应的递归处理函数,生成语法树节点函数体部分函数名 programbody功能程序体部分的处理/产生式 < programbody:= begin stmlist end说明函数根据文
37、法产生式,调用相应的递归处理函数,生成语法树节点函数名stmlist功能语句部分的处理函数产生式 < stmlist > stm stmmore说明函数根据文法产生式,调用相应的递归处理函数,生成语法树节点函数名stmmore功能语句部分的处理函数产生式 < stmmore::=£ | ; stmlist说明函数根据文法产生式,调用相应的递归处理函数,生成语法树函数名stm功能语句部分的处理函数产生式 < stm > = conditionalstm ifloopstm inputstm outputstm return stmwhilereadwrit
38、ereturn| id asscall id说明函数根据文法产生式,调用相应的递归处理函数,生成语法树节点函数名asscall功能语句部分的处理函数产生式asscall::= assignmentrest :=,lmidparen,dot| callstmrest(说明函数根据文法产生式,调用相应的递归处理函数,生成语法树节点函数名 assignmentrest功能赋值语句部分的处理函数产生 jrg < assignmentrest > := varimore : = exp说明函数根据文法产生式,调用相应的递归处理函数,生成语法树节点函数名 conditionalstm功能条件语
39、句部分的处理函数产生式 <conditionalstm:=if relexp then stmlist else stmlist fi说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名loopstm功能循环语句部分的处理函数产生式 < loopstm::= while relexp do stmlist endwh说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名inputstm功能输入语句部分的处理函数产生式 < inputstm > := read(id)说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名outp
40、ut stm功能输出语句部分的处理函数产生式 < outputstm::= write(exp说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名returnstm功能返回语句部分的处理函数产生式 < returnstm > :=return(exp)说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名 callstmrest功能函数调用语句部分的处理函数产生式 < callstmrest::= (actparamlist)说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名 actparamlist能函数调用实参部分的处
41、理函数产生式actparamlist::=8 | expactparammore说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点函数名 actparammore能函数调用实参部分的处理函数产生式actparammore::=£ | , actparamlist说明函数根据文法产生式,调用和应的递归处理函数,生成语法树节点表达式部分函数名exp功能表达式处理函数产生式 exp := simple exp | 关系运算符 simple exp说明函数根据文法生式,调用相应的递归处i函数,生成语法树节点函数名 simple_exp功能表达f处理产生式simple_exp := term |加法运算符term说明函数据文法产生式,调用相应的递归处理函数,生成语法树节点函数名term功能项处理函数产生式 < 项:=factor |乘法运算符factor说明函数根据文法产生式,调用相应的递归处理函数,生成语法树节点函数名factor功能因子处理函数产生式 factor := intc | variable | ( exp )说明函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CRH 0003-2020生殖健康用品企业生产管理规范
- T/TMAC 140-2025智能穿戴设备用热塑性聚氨酯弹性体(TPU)技术要求
- T/GBIA 001-2023食用燕窝
- T/CI 238-2023水性凹印光油
- T/CAAMTB 61-2021汽车驾乘性体验测试评价规程
- T/CPIA 0079-2024柔性支架应用场景下光伏组件测试方法
- 2025~2026学年河南省周口市项城市校联考西南大学版三年级上册12月阶段性数学试卷【附答案】
- 2025~2026学年安徽宿州市埇桥区北师大版三年级下册期末考试数学试卷【附答案】
- 2025-2026学年福建省永安市初中政治八年级期末下册通关黑金提分题附答案
- PHP实习生面试题(含详细真实答案)
- 2026贵州省安全员《C证》考试题库
- 2026年烟草江苏公司招聘考试试题及答案
- 2026年数据中心基础设施运维岗高频面试题包含详细解答
- 创新当下粮安未来-2026年世界粮食日主题班会
- 八省八校(T8)2026-2027学年度第一学期高三检测语文试卷(含答案)
- 2025年国家能源集团工作人员招聘考试笔试试题(含答案)
- 2026招商银行校园招聘模拟笔试真题(含详细答案解析)
- 交管12123学法减分题库500题(含标准答案+解析2026全国完整版)
- 鼻导管吸氧技能操作课件
- 《陈列演示规范》课件
- 企业财务数字化转型建设和应用水平评价指南
评论
0/150
提交评论