(计算机软件与理论专业论文)fortran95+to+cc翻译系统设计与分析.pdf_第1页
(计算机软件与理论专业论文)fortran95+to+cc翻译系统设计与分析.pdf_第2页
(计算机软件与理论专业论文)fortran95+to+cc翻译系统设计与分析.pdf_第3页
(计算机软件与理论专业论文)fortran95+to+cc翻译系统设计与分析.pdf_第4页
(计算机软件与理论专业论文)fortran95+to+cc翻译系统设计与分析.pdf_第5页
已阅读5页,还剩52页未读 继续免费阅读

(计算机软件与理论专业论文)fortran95+to+cc翻译系统设计与分析.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子科技大学硕士学位论文 论文摘要 f o r t r a n ( 英文f o r m u l at r a n s l a t i o n 的缩写) 1 9 5 4 年设计并于1 9 5 7 年 在i 踟7 0 4 机上实践的第一个高级语言,1 9 6 6 年美国标准协会( a m e r i c a n s t a n d a r d sa s s o c i a t i o n ) 公布了a s af o r t r a n ,直至发展到现在的f o r t r a n 2 0 0 0 。f o r t r a n 是典型的强调执行效率的语言,结构简单,不强调程序设计技巧, 进而达到提高执行效率的目的。f o r t r a n 语言主要用于科学计算,作为数值计算 工具,特别适合解决数据量少而计算复杂的问题。在国外,它广泛用于科学计算 ( 如航空航天、地质勘探、天气预报和建筑工程等领域) 和工程模拟的计算中。 而在d o s 系统下开发了大量可靠的f o r t r a n 源程序计算代码,已经经历了时间的 考验,是成熟和稳定的代码,这是一笔不可多得的财富。随着计算机科学与技术 的日趋完善,使用f o r t r a n 语言的人越来越少。鉴于c c + + 语言的强大的功能和 通用性,已成为最时髦最通用的语言之一而备受青睐。 现在一些单位十分希望将早期f o r t r a n 7 7 和新近f o r t r a n 9 5 源代码转换成有 相同功能的c c + + 应用程序,使其继续发挥其强大作用,便于程序的二次开发和 应用。纵观国内外,现有f 2 c 自动翻译工具可以将f o r t r a n7 7 应用程序翻译成 相应的c 语言。但这一转换工具也存在一些缺点。最重要的是,f o r t r a n9 5 增 加了许多新的语言特性,如面向对象的功能,提高了文字处理功能,使f 9 5 可以 胜任信息管理系统、办公自动化的任务,加强了在数值计算领域中应用的威力等 等。这导致了已有的旧翻译器无法翻译用新版本写的f o r t r a n 应用程序。这时, 设计新的翻译系统,使其能将f o r t r a n9 5 应用程序翻译成c c + + 应用程序, 具有很大的市场价值与科学研究的价值。 本文讲述的f t o c c + + 翻译系统是以翻译程序基本原理出发,着重分析了选 择项目方案,目标代码,并以c c + + 为目标代码并没有减轻项目难度的原因。更 进一步,我们对项目进行了系统分析,模块分析并且介绍了f t o c c + + 的预处理 模块,词法分析模块,语法分析模块的设计思想,并且我们列出了f o r t r a n9 5 与c c + + 这两种程序设计语言的部分对应关系。在第七章的结尾部分重新阐述了 项目的意义和需要注意的相关问题。 关键字f o r t r a n9 5 翻译器预处理词法分析语法分析 电子科技大学硕士学位论文 a b s t r u c t f o r t r a ni st h ef i r s ta d v a n c e dp r o g r a m m i n gl a n g u a g e ,w h i c hw a sd e s i g n e d f r o m1 9 5 4a n di m p l e m e n t e di ui b m 7 4 0m a c h i n e i n1 9 5 7 ,i n1 9 6 6 ,a m e r i c a n s t a n d a r da s s o c i a t i o ni s s u e da s a f o r t r a n t h e1 a t e s tv e r s i o ni sf o r t r a n 2 0 0 0 f o r t r a ni sa t y p i c a lp r o g r a m m i n gl a n g u a g e t h a ti sf o c u s e do ne x e c u t i o ne f f i c i e n c y , h a ss i m p l es t r u c t u r e a n dd o e s n ts t r e s so np r o g r a m m i n gt r i c k s f o r t r a ni sm a i n l y u s e di ns c i e n c ec o m p u t i n g a sat o o lf o rn u m e r i c a lv a l u ec o m p u t i n g ,i ti se s p e c i a l l y a d a p t e dt o t h e c o m p l i c a t ec o m p u t a t i o nw i t h f c wd a t a i nf o r e i g n f o r t r a ni s w i d e l yu s e di ns c i e n c ec o m p u t a t i o na n ds i m u l a t e de n g i n e e r i n gc o m p u t a t i o n ,s u c ha s a v i a t i o n ,g e o l o g i ce x p l o i t a t i o n ,w e a t h e rf o r e c a s ta n da r c h i t e c t u r ec o n s t r u c t i o n t h e r e a r en u m e r o u ss t a b l es o u r c ec o d e sd e v e l o p e di nd o se n v i r o n m e n t ,w h i c hi s o u r f o r t u n e w i t ht h ed e v e l o p m e n to fc o m p u t e rs c i e n c e t h e r ea r el e s sp r o g r a m m e ru s e f o r t ra n m e a n w h i l e c c + + b e c a m et h em o s tu s e dp r o g r a m m i n gl a n g u a g ef o ri t s p o w e r f u lf u n e t i o n i nt l l i sc o n d i t i o n s o m ec o m p a n i e sh o p et ot r a n s l a t et h ef o i h r a n 7 7o r f o r t r a n 9 5s o u r c ec o d et oc c + + s o u r c ec o d ew i t ht h es a m ef u n c t i o n t h e r e f o r e t h e s ec o d ec a nb eu s e dt or e d e v e l o p m e n t f 2 ei st h et r a n s l a t i o nt o o lw h i c ht r a n s l a t e s f o r t r a n 7 7t oc o r r e s p o n dcc o d e b u tt h i st o o ih a ss o m ed r a w b a c k t h ek e yi st h a t f o r t r a n 9 5w e r ea d d e dm a n yn e wc h a r a c t e r i s t i e s s u c ha so b j e c t - o r i e n t e df e a m r e a n de n h a n c e df u n c t i o nt od e a lw i t hw o r do p e r a t i o n w h i c hm a k ef o r t r 久nb e a p p l i e dt od e v e l o pi n f o r m a t i o ns y s t e ma n do as y s t e m ,a n dr e s n i ti nm o r ep o w e r i n t h ef i e l do fn u m e r i c a l c o m p u t a t i o n s ot h ep r o b l e mi s t h a to l dt r a n s l a t o rc a l l t c o r r e c t l yt r a n s l a t em a n ya p p l i c a f t o nc o d e di nf o r t r a n 9 5 i ti st h et i m et od e s i g n n e wt r a n s l a t o r st oa d a p tt h er e q u i r e m e n t ,w h i c hh a sm u c hm a r k e ta n dr e s e a r c hv a l u e b a s e do nt h e t h e o r y o fc o d et r a n s l a t i o n w ei n t r o d u c eo n rf t o c c + + t r a n s l a t i o ns y s t e m w ea n a l y s es i g n i f i c a n c eo ft h ep r o j e c t ,t h es e l e c t i o no ft a r g e t s o u r c ec o d e ,a n dt h ec o m p l e x i t yo ft h es y s t e m f u r t h e r m o r e ,w eg i v et h es y s t e ma n d m o d u l ea r c h i t e c t u r e a n di n t r o d u c et h ed e s i g no f p r e c o m p i l em o d d e ,l e x i c a lm o d u l e a n ds y n t a xm o d u l e n l e nw el i s tp a r t so fr e l a t i o nb e t w e e nf o r n 渔n 9 5a n dc c + + l a s t l y , w ee m p h a s i z et h em e a n i n go ft h i sp r o j e c ta n ds o m ei m p o r t a n ti s s u ea b o u t t r a n s l a t o r k e y w o r d :f o r t r a n 9 5t r a n s l a t o r p r e c o m p i l e l e x i c a l s y n t a x 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我同工作的同志对本研究所做的任何贡献均己在论文中作了明 确的说明并表示谢意。 签名:硝必咎日期:o 口0 4 年2 月2 6 曰 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:;徨丝查导师签名:丝! 丝 日期:。一峰年。f 月o ? f 日 电子科技大学硕士学位论文 一一 1 1 翻译程序 第一章引言 通常所说的翻译程序是指这样的一个程序,它能够把某一种语言程序( 称为源 语言程序) 改造成为另一种语言程序( 称为目标语言程序) ,而后者与前者在功能 上是等价的。如果源程序是高级语言,而目标程序是汇编语言或机器语言之类的低 级语言,这样一个翻译程序就称为编译程序。 通常把整个翻译过程分为若干个阶段,每个阶段完成不同的任务。这些阶段包括: 词法分析、语法分析、语义分析优化和目标代码生成器。图卜1 显示了翻译程序的 框图。 、 一 l 一 1 l 龋释f 一 一 _i词法分析p1 一 1r 1 1 p i 一 i 单词符号o 一 + 一 表 ii i 撕一i 出 格话 管处 理 单位“ 理 叫语义分析和中间代码生成卜卜+ j r 目耕隅一 li t e 纠= j 昆序一 l 。 目标代码。 图1 1 翻译程序框图 电子科技大学硕士学位论文 1 2 简述项目背景 f o r t r a n ( 英文f o r m u l at r a n s l a t i o n 的缩写) 是1 9 5 4 年设计并于1 9 5 7 年在 i b m7 0 4 机上实践的第一个高级语言,1 9 6 6 年美国标准协会( a m e r i c a n s t a n d a r d s a s s o c i a t i o n ) 公布了a s af o r t r a n ,直至发展到现在的f o r t r a n2 0 0 0 。f o r t r a n 是 典型的强调执行效率的语言,结构简单,不强调程序设计技巧,进而达到提高执行 效率的目的。f o r t r a n 语言主要用于科学计算,作为数值计算工具,特别适合解决数 据量少而计算复杂的问题。在国外,它广泛用于科学计算( 如航空航天、地质勘探、 天气预报和建筑工程等领域) 和工程模拟的计算中,已在d o s 系统下开发了大量可 靠的f o r t r a n 源程序计算代码。这些代码经历了时间的考验,是成熟和稳定的代码, 是一笔不可多得的财富。 本项目是将f o r t r a n 应用程序翻译成具有相同功能的c c + + 应用程序。其中, f o r t r a n 应用程序包含有在d o s 下用f o r t r a n7 7 编写的源代码和在w i n d o w s 下用 f o r t r a n9 5 编写的源代码。 随着计算机快速发展,d o s 系统已基本上被w i n d o w s 系统代替,并广泛使用在 p c 机上,很多工程专用或通用软件以实现了w i n d o w s 下的开发和使用。但长期以来, 对p c 机用户而言,f o r t r a n 源代码的编译都是在d o s 环境下采用f o r t r a n7 7 标准 进行的,无法利用3 2 位操作系统( 如w i n d o w s9 x 和w i n d o w sn t ) 的多种优点。此 外,f o r t r a n7 7 标准在很多方面对程序员有一定限制,如实现较大量的数组和矩阵 的处理受d o s 基本内存容量的限制等。新的f o r t r a n9 5 标准废弃了过时的严格的源 程序书写格式,功能有更大的扩充。为了保护对f o r t r a n 7 7 用户在软件开发上的巨 大投资,整个f o r t r a n 7 7 被作为f o r t r a n9 5 的一个严格子集,即f o r t r a n9 5 标准 包含了f o r t r a n7 7 所有的标准。 近几年,国内的一些研究所和科研机构,购入了大量f o r t r a n 源代码,如果 能迅速有效的实现d o s 系统的f o r t r a n 程序代码在w i n d o w s 下重用,就可以 使原有的f o r t r a n 计算程序代码继续发挥其强大作用,实现程序的二次开发和应 用,这是一件十分有意义的事。 1 2 1 f o r t r a n7 7 应用程序在w i n d o w s 下调用方案 为了解决d o s 下f o r t r a n 源程序在w i n d o w s 系统下应用问题,目前已经积累了 许多经验,常用的方法有: 2 电子科技大学硕士学位论文 方案l在d o s 下,用m i c r o s o f t f o r t r a n5 x 或m i c r o s o f t f o r t r a n p o w e r s t a ti o n1 0 将f o r t r a n 源代码编译成16 位动态连接库,然后在w i n d o w s 环 境下用m i c r o s o f tv i s u a lb a s i c ,m i c r o s o f t v i s u a lc 抖或b o r l a n dc 抖或 p o w e rb u i l d e r 的1 6 位版本生成的应用程序来调用f o r t r a n 模块中的函数和应用 程序。 方案2在m i c r o s o f td e v e l o p e r s t u d i o4 0 开发环境中采用f o r t r a n 和 c 混合编程的方法,将f o r t r a n 源代码静态编译和连接到c 语言的开发项目中。 方案3将m i c r o s o f tf o r t r a n p o w e r s t a t i o n4 0 和d i g i tv i s u a lf o r t r a n 5 0 将f o r t r a n 源代码编译成3 2 位动态连接库,然后在w in d o w s 环境下用m i c r o s o f t v i s u a l b a s i c ,m i c r o s o f t v i s u a lc + + 或b o r l a n dc + + 或p o w e rb u i i d e r 生 成的应用程序来调用f o r t r a n 模块中的函数和应用程序。 方案4将f o r t r a n 源代码翻译成某种高级程序语言( 即目标语言) 源代码, 然后用w i n d o w s 下此目标语言编译器和连接器,进行编译和连接,从而使之成为 w i n d o w s 下的应用程序。 1 2 2 常用方案特点及选用方案 以上4 种方案的结果表明。 方案1生成的d l l 是1 6 位,不能被3 2 位的应用程序使用,不能发挥w i n d o w s 环境的优点。 方案2c + + 语言和f o r t r a n 语言的混合编程就是利用= 种编程语言编写的源代 码构建程序模块的过程。混合语言编程具有以下优点,利用某种语言处理某些问题 特有的速度和优势,如f o r t r a n 语言具有强大的科学计算速度和能力是一种适合数 值计算的语言,其语法检查严格,运行稳定性好,在科学计算和工程设计领域中有 广泛的应用,但是在绘图网络等方面则显不足。v i s u a lc + + 具有良好的图形界面和 系统管理能力同w i n d o w s 操作系统有很好的亲和性调用已经存在的源代码。混合编 程虽然完全实现f o r t r a n 语言的w i n d o w s 化,由于是静态连接,代码量特别大,不 利于程序的模块化和结构化,效率较低。 以前不少程序员对c c + + 和f o r t r a n 的混和编程进行过研究,但大多数集中在 c c + + 和f o r t r a n7 7 。随着w i n d o w s ,c + + ,f o r t r a n9 5 的出现,以前很多d o s 编程方 式都被w i n d o w s 编程方式所替代,而源代码中的大,中,小编译方式和远,近指针 等在w i n d o w s 编程下已经不存在。, 3 电子科技大学硕士学位论文 方案3这是一种动态连接,动态调用完全实现f o r t r a n 语言的w i n d o w s 化。 但它的实施受调用方提供的接口限制,需要编制不同的调用程序,同时涉及被调用方 的f o r t r a nd l l 的建立,调用方调用手段的确定,以及双方的调用设定,属性设置 等具体问题,给工程技术人员的使用带来困难。 方案4成熟的编译原理理论和经过实践证明的准确无误的源代码,使翻译工 作较容易进行,但与其它方案相比,需要编写的代码量较大。 因项目甲方要求,项目要达到的目的不仅仅使原有的f o r t r a n 应用程序能在 w i n d o w s 下使用,而且必须将f o r t r a n 应用程序转换为与源程序有相同功能的某种高 级语言应用程序。综上所述,项目组决定选择方案4 ,设计翻译器f t o c c + + ,将f o r t r a n 应用程序翻译成相应的c c + + 目标应用程序。 1 2 3 选择目标语言 1 9 9 1 年美国牛津大学n a g ( n u m e r i c a la l g o r i t h m sg r o u p ) 宣布世界上第一 个f o r t r a n9 0 的编译系统f 9 0 所产生的目标语言是c 语言。这给项目组提供了思路, 翻译程序可否也用c c + + 程序设计语言为目标语言呢? 经过反复论证,以c c + + 程序 设计语言为翻译系统的目标语言是完全可行的。这是因为 ( 1 ) c c + + 语言的国际标准工作做得比较出色,用c c + + 语言编写的程序移值 性较好。f t o c c + + 是用c c + + 语言编写的,以c c + + 为目标语言f t o c c 十+ 翻译系统。 故翻译系统和翻译后的目标程序的移植性都较好。 ( 2 ) f o r t r a n9 5 标准拥有c + + 几乎所有的特性,如强大的封装,继承,多重继 承,多态等。如翻译这些特性,只用c 语言为目标语言,难度相当大,故将c + + 也作 为目标语言。 ( 3 ) 从软件的编程环境来看,目前f o r t r a n9 5 的编译器极少而且价格比c c + + 编译器昂贵,而c c + + 语言的编译系统相当普及,可以运行在各种机型上,便于实现 跨平台的软件系统集成。另外,c + + 编译器卖方的竞争意味着c + + 编译器正产生着越 来越快的代码,然而,f o r t r a n 编译器较小的卖方市场,排除了进一步的商业发展。 ( 4 ) 虽然f o r t r a n 语言被认为是科学计算的专用语言。近年来,随着计算软硬 技术的发展,数据结构,数据库管理技术可视化与计算机图形学用户接口系统集成 以及人工智能等领域的成果,被逐渐应用到结构分析软件中。结构分析软件的设计, 并不仅仅局限于单一的科学计算,需要涉及众多的软件开发领域。c + + 语言可以提供 这类软件开发所需的功能,而用f o r t r a n9 5 却很难实现。 4 电子科技大学硕士学位论文 综上所述,在当前这个开放和标准的世界中,实现一种程序设计语言翻译时, 将c c + + 语言做为一种目标代码已经被人们所接受。f t o c c + + 翻译系统就是把 f o r t r a n 源代码翻译成与源应用程序相同功能的c c + + 应用程序。 1 2 4 分析c o + + 为目标语言的优缺点 优点内存管理,控制语句和部分表达式处理可以直接使用。 缺点属性语句,i o 语句,宏观控制结构,模块,辅程序结构块,辅程序形参和 实参的结合,数据类型处理等,在c c + + 语言中没有相应的语义等价的语言成分,这 时选用c c + + 做为目标语言,反而成为实现的障碍,因为我们不能对c c + + 语言的语 义进行修改。另外,在设计过程中还要实际分析c c + + 语言是如何实现的技术细节问 题,列入控制结构的嵌套层次,数据类型的内部存储等。 1 2 5 实现困难的原因 由上面分析得知,f o r t r a n9 8 与c c + + 是两种不同的程序设计语言,用c c + + 为目标语言,并没有降低项目的难度。主要原因是 ( 1 ) f o r t r a n9 5 语言主要用于科学计算和数值处理领域,而c 语言是为系统 程序设计提出来的。c 最初出现是用作u n i x 操作系统的记述语言,一直作为较低级 语言编写与硬件关系密切的底层软件。由于两者产生的背景不同,它们的差异主要 表现为,函数调用参数,传递多维数组的处理,内存动态管理,特别是在多维数组 的处理方面。f o r t r a n 从一开始就必须处理矩阵一类的数学问题,多维数组是它的主 要使用工具。而c 语言一开始是面向系统程序员的,在应用中很少会涉及多维数组, 因此在处理多维数组方面存在着较大差异。 ( 2 ) 即使两种语言对于同一种程序设计概念,在编译程序中的概念有所不同, 造成了相应的语言成分之间也存在着很细微的语义差别,很难找到一种直接的对应 关系。 ( 3 ) 数组和矩阵被广泛用于工程计算和应用数学中,f o r t r a n9 5 有强大的内 部函数和内部运算符对数组和矩阵的部分运算,如:数组间的加,减,乘和除,矩 阵的加和减。但c c + + 的数组和矩阵运算相对薄弱。 所以,对于这两种语言之间存在的不同之处,翻译程序必须进行特殊翻译处理, 以填平源语言与目标语言之间的细微差别。 5 电子科技大学硕士学位论文 1 3 翻译器重要性 当今社会随着信息技术的飞速发展,计算机科学与技术作为信息技术的核心技 术之一也得到了极大的发展。计算机科学与技术日趋完善,但也遇到了很多的问题。 由于新程序语言的不断出现和功能的不断强大,那些由成熟语言编写的大量程序面 临着改写的问题,这正是翻译程序所要解决的问题。由于计算机科学与技术发展的必 要与市场的需求,对翻译程序的研究也重新提到日程上来。 f o r t r a n 是世界上第一个被正式推广使用的主要用于科技工程数值计算的高级 程序设计语言,在科学计算中发挥着极其重要的作用,至今已有4 0 多年的历史。而 c c + + 因其强大的功能,作为现在最时髦最通用的语言之一而备受青睐。 经过无数调研发现,国际上已经能够实现将f o r t r a n7 7 应用程序翻译成到相应 c 代码的翻译器( 或称源代码转换器) 。f o r t r a n9 5 后的版本也加入了面向对象的 功能,在原有特性的基础上增加了很多强大的功能,提高了文字处理功能,可以胜 任信息管理系统、办公自动化的任务,加强了在数值计算领域中应用的威力,这导 致了已有的旧翻译器无法翻译用新版本写的f o r t r a n 应用程序。但是f o r t r a n 范围 有限,应用人群也有限。鉴于c c + + 语言的强大的功能和通用性,将f o r t r a n 语言源 代码实现的工程翻译成c c + + 源代码刻不容缓。实际上现在有很多的这样的程序面临 着f o r t r a n 语言到c c + + 语言源代码的重写,鉴于这种情况一个通用的f o r t r a n 语言 到c c + + 语言的转换器( 翻译程序) 具有很大的市场价值与科学研究的价值。 而作者有幸在毕业设计中参与了基于中铁二局桥梁设计程序的f o r t r a n 语言源 代码转化为c c + + 语言的源代码的翻译器的设计工作。因客户要求,我们决定攻克这 个难题。 1 4 新的发展方向 1 4 1 建立动态连接库 将m i c r o s o f tf o r t r a np o w e r s t a t i o n 4 o 和d i g i tv i s u a l f o r t r a n5 0 将f o r t r a n 源代码编译成3 2 位动态连接库,然后在w i n d o w s 环境下用m i c r o s o f t v i s u a l b a s i c ,m i c r o s o f t v i s u a l c 十+ 或b o r l a n dc + 十或p o w e r b u i l d e r 生 成的应用程序来调用f o r t r a n 模块中的函数和应用程序。这类方法的实施受调用方 提供的接口限制, 需要编制不同的调用程序,同时涉及被调用方的f o r t r a nd l l 的 6 电子科技大学硕士学位论文 建立,调用方调用手段的确定,以及双方的调用设定,属性设置等具体问题,给 工程技术人员的使用带来困难,但这是一种十分有效的方案。 1 4 2 实施源级转换 语法分析的结果是语法树,抽象语法树是语法树的一种高效表示方法,是改进了 的语法树。改进的规范抽象语法树结点数比改进前语法分析树的结点少,内存需求量 下降,相应的运行速度亦加快。抽象语法树鉴于抽象语法树弃去了语言语法构成成份 中与表示法有关的非本质部分,保留了程序中与表示法无关的本质信息,抽象语法树 是不同语言中同类语法成分的极好的公共表示法,可利用作异种语言间源级转换的极 好的中问表示。 1 源级转换 源级转换是指两种高级程序设计语言间的源程序级转换,也即把一种语言a 的源 程序p f l , ,转换成另一种语言b 的等价源程序pb 。所谓等价,是指功能等价,在实现 源级转换时,关键是找出这两种语言间的对应关系当对应关系能正确地确定并实现 时,pb 的性行便完全反映了p a 的性行。下面对源级转换作简单介绍,我们以语言 a ( 我们用f o r t r a n ) 的源程序p a ,转换成另- 4 十语言b ( 我们选用c c + 十) 的等 价源程序pb 。把整个程序命名为f t o c ( ftoc 系统的总体结构如图卜2 ) 。 2 ftoc 的实现思想以及系统的总体结构 fto c 系统的实现思想是以转换规则制导,且基于规范抽象语法树。确切地说。 首先基于fortr a n 的语法规则,从fortr a n 程序生成相应的规范抽象语 法树然后基于转换规则,从规范抽象语法树生成相应的c 语言源程序。 阳l l i 】舢瓣 图1 - 2ftoc 系统的总体结构 7 c 诳1 l 程 i c 电子科技大学硕士学位论文 抽象语法树生成器输入要被转换的fo rt1 ra n 源程序完成词法分析与语法 分析,并生成中间语言规范抽象语法树。树到c 程序转换器,其功能是根据转换规则从 抽象语法树生成相应的c 语言程序。 3 转换规则 转换规则的形式: u := x 1 x2 x 3 x m = y 1 y2 y3 y 。 转换规则左部表示为 l 1 :规则长度 x = ii n s i & 一c n 燃t a 葫o n 0 1 s y m b 删o l , , l 2 :规则右部生成结点的符号数 转换规则右部表示为 li n s i d e 带p 砬s o m a t i 瓣l 时s yt u b a l , x 。16 0 0 0 + j f t h en o 硝s y m b d ) , l7 0 0 0 + k ( t h en o o fs y s t mf u n c t i 嘲1 。 4 举例说明转换规则 f o r t r a n 语言的函数语句的文本表示为 ( 函数语句) := ( 类型) funct10n ( 函数名) ( ( 参数表) ) c 语言的函数语句的文本表示 8 电子科技大学硕士学位论文 ( 函数语句) := ( 类型) ( 函数名) ( ( 参数表) ) p a r a m ty p e 下面用转换规则来表示两种语言函数语句,例如 ( 函数语句) := ( 类型) f u n ctio n ( 函数名) ( ( 参数表) ) = ( 类 型) ( 函数名) ( ( 参数表) ) p a r a m t y p e 按前面的转换公式,我们将规则左部的表示为 | 6 3 = 4 0 0 0= 4 0 0 0 6 是规则长度,即类型,f u n ct10 n ,函数名,( ,参数表,) 。 3 规则右部生成结点的符号数,即可以生成结点的符号为类型,函数名,参数 表。 u 是规则左部,因u i 是( 函数语句) ,故u = 4 0 0 0 + u i = 4 0 0 0 + 函数语句。 x i = 4 0 0 0 + j ,因为在规则表示中,j = ( 类型) ,j 表示非终结符,因此在转换 规则中为4 0 0 0 - f j ,即x l = ( 类型) + 4 0 0 0 。 同理,j _ 函数名,j _ 参数表时,处理方法同上。 转换规则右部的表示为: 其中,y i 表示6 0 0 1 ,因为是规则右边的第一个标识符。 1 4 3 产生公认的中间代码形式系统 对词法分析和语法分析来说,已经有相当成熟的理论和算法。因语义形式化问 题要比语法形式化问题难得多,所以对从单词符号序列产生出i m 代码,即对于中 间代码产生而言,目前还没有一种公认的形式系统。现在许多编译程序普遍采用一 种语法制导翻译方法,但这仍然是一种形式系统,虽然比较接近于形式化,但仍在 相当程度上处于经验阶段。如何产生公认的中间代码形式系统是摆在我们面前新的 课题。 9 一一 皇主翌垫查堂堕主堂垡堕苎 - _ _ _ _ _ _ h _ _ _ _ _ _ _ _ _ _ _ - - _ _ _ _ _ _ _ _ _ , _ _ _ - _ _ _ _ _ _ _ _ _ - 一 第二章系统设计思想与实现分析 前面介绍了本翻译器需要分析的源语言,在了解了源语言的一些特性以后,更加 有助于我们翻译过程准确的对语言进行分析和翻译。下面我们就对翻译器的整个系 统的设计思想和实现技术进行分析。 2 1 系统需求分析 课题来源:铁道部第二研究院 选题依据:随着其他高级语言和软件的发展,产生了许多都能够用来作科学计 算的语言,其中较为典型的是c c + + 。但是因为c c + + 出现时间相对较晚,所以他能 利用和借鉴的材料是无法和f o r t r a n 语言相比的。所以,实现f o r t r a n 翻译成c c + + , 十分重要。 目前,我们可以用现有的f 2 c 自动翻译工具将f o r t r a n7 7 应用程序翻译成相应 的c 语言。这一转换工具可以使运行时间库函数比手工实现方便的多,但也存在一 些缺点。例如,( 1 ) 翻译后的c 程序的数组假设是按列存储,但实际上,国际标准 规定c 语言的数组是按行存储。在新的f o r t r a n9 5 版本中,增加了许多处理数组 的函数,这使f 2 c 工具更加不适用:( 2 ) 全部参数采用传地址的方式:( 3 ) 为了交 换数组而采用了临时变量:( 4 ) 翻译出来的c 程序的可读性差。最重要的是,f o r t r a n 9 5 增加了新的语言特质,如指针等。纵观国内外的研究状况,至今没有将f o r t r a n9 5 应用程序翻译成c c + + 应用程序的翻译器。而在许多实际工程运用,特别是在建筑, 机械方面,很多f o r t r a n 应用程序适用在有较高图形制作要求的工程中。为更好的 利用这笔宝贵的财富,实现应用程序的二次开发,我们决定开发翻译器,实现将 f o r t r a n9 5 应用程序翻译成相应的c c + + 应用程序。 在具体的实现过程中,因为我们没有f o r t r a n9 5 的文本,需要通过各种方法 查找。实际上,我们没能通过网络搜索的方法找到标准文本,而是通过自己的辛苦 工作总结了f o r t r a n9 5 的标准文本,这项工作占用了项目组各个成员的大量时 间。其二,f o r t r a n 语言主要用于科学计算。作为计算机专业出生的项目组各个 成员,以前从没有接触过f o r t r a n 语言,更不用说对这门语言的应用。要把 f o r t r a n 应用程序翻译成相应的c ,c + + 的应用程序,必须要求翻译器的设计者对 f o r t r a n 语言的语义和用法非常的熟悉,因此这也是一个困难。经过项目组全体成 员的共同努力,在一定程度上解决了这些困难。 1 0 电子科技大学硕士学位论文 2 2 系统设计思想 本系统是对f o r t r a n9 5 语言所编写的桥梁设计程序进行分析综合,然后翻译成 c c + + 语言代码。在进行需求分析的过程中我们考虑到程序的通用性,不仅仅简单的 进行源语言编写的程序到目标语言的翻译,考虑到更深层次对一般的f o r t r a n 语言 源程序到c + + 语言转换。在进行可行性分析的过程中,有两条思路:第一条思路是利 用li n u x 或者u n i x 下已有的f 2 c 现有的程序进行分析改写。第二条思路就是构造编 译器,经词法分析,语法分析,语义分析后,直接将f o r t r a n 语言的源代码翻译成目 标语言c c + + 的代码。 将f o r t r a n9 5 中的语言成分转换成目标语言c c + + 程序设计中相应的语言成分 有三种情况,第一种,直接转换为c c + + 的语言成分,f o r t r a n9 5 中的语言成分与相应 的c c + + 语言成分没有任何差别,这种情况的处理较为简单,直接用c c + + 中的语言成 分替换f o r t r a n9 5 中的语言成分。第二,因c c + + 与f o r t r a n9 5 毕竟是两种完全不同 的程序设计语言,两者没有完全等价的语言成分。f o r t r a n9 5 在f o r t r a n7 7 上增加了 许多新特性,在实现过程中,有一定的难度。一般说来,以一组c c + + 程序来实现 f o r t r a n9 5 的功能,要求这一组c c + + 程序完全实现f o r t r a n9 5 的语义。第三,f o r t r a n 9 5 , 的语言成分没有与之等价的c c + + 语言成分,但不适合用一组c c + + 程序来实现, 这时,其目标语句匹配表的相应成分是一组编译系统语义函数和可选的c c + + 语言语 句集合。 值得庆幸的是,要翻译的f o r t r a n 应用程序是经过无数实践检测的完全正确的 程序。在对f o r t r a n9 5 文本分析的同时,我们惊奇的发现f o r t r a n9 5 的一部分语 句完全可以通过其逻辑规则识别出来,弗能在c c + + 程序设计语言中找到与之完全对 应的语句,如f o r t r a n9 5 部分类型说明语句。所以,当我们翻译这部分内容的时候, 没有采用常规的语法制导翻译。经过实践证明,这样处理是完全正确的。 2 2 1 f t o o c + + 翻译系统的功能设计 f t o c c + + 翻译系统可分为四个部分:命令行处理,预处理器,翻译器及库函数。 其功能模块划分如图2 一l 所示。 ( 1 ) 命令行处理f o r t r a n9 5 应用程序的编译总控。 ( 2 ) 预处理器对具有预处理命令行及注释的f o r t r a n9 5 语言的用户程序 实施预处理。可实现以下操作:删除注释,连接续行。 电子科技大学硕士学位论文 f t o c c + + 翻译系统 命令行处理预处理器翻译器库函数 图2 - 1f t o c c + + 功能模块 ( 3 ) 编译器对经过了预处理所得到的f o r t r a n9 5 源程序进行词法分析,语 法分析,语义分析的同时产生相应的c c + + 目标程序。 编译的具体方案采用2 遍扫描。 第一遍在语法分析过程中调用词法分析程序,建立符号表等。在进行语义分 析时,在符号表中填入相应信息,同时产生c c + + 目标代码。 第二遍用c + + 编译程序进行编译和连接装配。 ( 4 )库函数 包括字符处理函数,数学函数,输入输出函数,日期和时间函 数等。 2 2 2 f t o o o + + 翻译系统的结构设计 f t o c c + + 翻译系统分为四个部分进行处理:命令行处理,预处理器,翻译器及 库函数。由下述五个模块组成。 ( 1 ) 命令行处理模块执行对f o r t r a n9 5 语言用户程序的翻译总控。 ( 2 ) 预处理模块对f o r t r a n9 5 应用程序进行预处理。 ( 3 ) 词法分析模块把源文件中每一行的字符流转换成单词流,作为语法分析 输入。 ( 4 ) 语法分析及产生目标代码模块根据f o r t r a n9 5 文本识别不同语句,同 时生成相应的c c + + 目标程序。 ( 5 ) 库函数模块尽可能的找到c c + + 的库函数,使其与f o r t r a n9 5 的库函 数具有相同功能。如果找不到相同的库函数,要理解f o r t r a n9 5 库函数的具体含义, 用c c 十+ 语言编写能实现相同功能的子程序。 1 2 电子科技大学硕士学位论文 2 2 3f t o c c + + 翻译器的设计分析 f o r t r a n 程序是由一个主程序段和若干过程段( 子程序段或函数段) 组成。可以把 每一个程序单位用公式来说明,即:程序单位= 单位起始语句+ 程序体+ 单位结束 语句。程序体= 说明部分+ 执行部分。f t o c c + + 翻译器在具体实现过程中,采用的是 二遍扫描。在第一遍扫描的语义分析的同时,就产生c c + + 目标代码。 因f o r t r a n9 5 程序设计语言中每一条语句就能表达一个完整的含义。由此, 对f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论