C语言库函数程序转换方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//定义¥char表示字符类 型 //定义一个字符变量 砌 //定 义 ¥char的构 造 方 法
¥char()(J J
//定 义 ¥char的无 参 构 造 方 法
3)我们将字符指针类 型用 以下的 Java类来实现 :
class P¥char(
//定义 P¥char表示字符指针类型
(上海师范 大学 信息与机 电工程学院 ,上海 200234) f zhjj82—211@ 163.con1
摘 要 :结合通 用函数库 的特 点和正则表达 式的优 点设计和 实现 了一套 完善 、简单 、逻辑 结构 清晰 的转换方 法和 实现代码 ,该方 法不仅保证 了最终结果 的绝对 完全一致 ,而且 解决 了因 c语 言拥有 指针类型 而存 在 的数据 类型不 一 致 问 题 ,并 通 过 大量 测 试 用例 验证 了该 方 法 的 正确 性 、有 效 性 和 高效 性 。
的 c语言库 函数转换是一大重点 。C语言 中包含着 大量 的库 数 ,对通用函数库的转换主要存 在两方面的难题 。
函数 ,这 些函数不 仅数 量庞 大 ,提供 的 功能 也非 常丰 富 和强
1)C语言和 Java语 言的数 据类 型是不完 全一致 的 ,不仅
大 ,转换 好这部分函数 ,对整个转 换 系统 的代 码转换 正确 性 、 在数据类 型的种 类 、数量 、对应 的数 据类 型 的位 数上存 在 差
都 可能会 出现大量 的指针类型 ,转换为 Java代 码时 如何有 效
收稿 日期 :2008—10—06:修 回日期 :2009—03—05。 基金项 目:上海市教委荩金资助项 目(05DZ14)。 作者简介 :赵 瑾 (1982一),女 ,宁夏银川人 .硕 j:研究 生 ,主要研究=J=r向:网络 、多媒体 ; 祝蜀平 (1978一),女 ,河南 三 门峡人 ,硕士研 究 肆 .主要研 究方向 :网络 、彩媒体 ; 严忠林(1960— .弭 ,汀 :镇汀 人, 师 ,主要研 方 :计算机系统 、程序设计。
转换率和可用性都 具有 十分 重要 的 意义 。本文 就 以 c语 言 别 ,而且 还有许多没有对应关系的数 据类型 ,最 主要 的表现就
代码 中使用频率非常高 的通用 函数库 (stdlib.h)转 换做 为研 是指针类 型。C语言 中包 含有大量 的指针类 型 ,而 Java语言
究 重 点 。
C语 言的通用 函数库 中的函数向 Java语言代码 的转换 。本文 类 型变量 的本质特点 ,即 :指针类 型的变量实际上包含两方面
将在深入分析通用 函数库的函数特点 和输入输 出可能的条件 的内容 ,一个指 向该变 量首地址 的整 型变量 和一 个指 向与首
和分支 的基础上 ,设计一套特有的指针处理方法 ,再 结合 正则 表达式 的方法和优点 ,实现一套完 善、简单 、逻辑结 构清 晰的 转换方法和实现代码 ,保证最终结果 的绝对完全一致 ,保证转 换 结 果 的正 确 性 和 高 效 性 。
典的过程式语言 c语 言 向纯面 向对 象语 言 Java语 言 的转换
(以下 简称“C to Java代码转换 ”)作为研究对 象。
2 通用 函数库 转换 的难题和 目标
C to Java代 码转换是一项 非常 庞大 和复 杂的工 程 ,其 中
通用 函数 库是 C语 言代码 中使 用 频率 非常 高 的一类 函
的分叉 ;Java中的方法也可能有多种输入输 出分叉 ,问题 的关
对 于 c中的 char类型 ,我们采用 Java的 char类 型作为转
键就在于 即使能够找到实现相 同功能 的函数或方法 、并且 在 换后 的数据类型 Hale Waihona Puke Baidu
相 同的输人参数的条件下 ,执行结果也 不能保证 绝对地完 全 3.1.2 指 针 类 型 的 转 换
方括 弧内的部 分是 可以省 写的 ,表 中所 列 出的 “最小 取 值范围”是指不能低于此值 ,但可高于此值 。另外 ,标准 c中 还包 括 long long类型 ,它的 比特数是 64位 。
276
计 算机应 用
第 29卷
而 正确 地 处 理 C语 言 的指 针 类 型 是 一 大难 点 和重 点 。
换后的数据类型 ;对 于 c中的 double类 型 ,我们 采用 Java的
2)虽然通用 函数库 中的许多 函数在 Java中也能够 找到 double类 型作为转换后 的数 据类 型 ;对于 c中的 long double
不仅避免 了因抛弃原 系统在零基 础上开发新系统所面 临的开 地址 ;2)用来查 找字符 串 ,从 一个 长 的文本 中查 找符 合 指定
发费用 、开发周期和安全性的风险 ,而且 能够继承原系统 的优 特 征的字符串 ,比查找 固定字 符 串更加 灵活 方便 ;3)用 来替
势 ,节省 开发的成本 ,提 高效率 ,降低 风 险 ;同时 ,转换后 的代 换 ,比普通 的替换更强大 。
码 在 进 一 步 的开 发 和优 化 升 级 过 程 中 ,能 够 更 好 地 利 用 现 代
正则 表达式的最大的优点就是对 字符串的查询操作非常
编程语言所提供 的技术 和方 法 ,开 发 出更 加 完善和强 大 的系 方便 ,尤其是在 匹配 和查找指定特征的字符 串时 ,合 理而灵活
统 。
3.1 数 据 类 型 的转 换
例 阐述转换 c语言 指针类 型变量 的方 法。限 于篇幅 我们在
3.1.1 基 本数 据 类 型 的 转 换 1)整 数 类 型 。
此不逐一详细介绍所 有其 他 C语 言指针类 型 ,在 实际使用 中 可根据需要类 推出对应 的解决方法 ;
表 1 ANSI标 准 定 义 的 整数 类 型 【 】
指从一种 编程语 言到另一种 编程语 言之 间的转换 ,转换后 两 和特殊字符 (元字符 )组成 ,能按照 特定语法规 则被解 释成 多
个程序 的功能完全 相同。我们将 早期 的编程语言编写 的代码 种字符 串,并 以此对 目标 字符 串进行 匹配 。也 可以说正 则表
和软件称 为遗产代码 和遗产软 件。通 过程序转换技术将遗产 达 式 就 是 用 一 个 “字 符 串 ”来描 述 一 个 特 征 ,然 后 去 验 证 另 一
现成的 、具有相同功能的方法 ,但是它们 的执行效果并不完全 类型 ,我们采用 Java的 BigDecimal类 型作为转换 后 的数 据类
一 致 。C语言 中的每一种函数在传人 的参数条件不 同的情况 型 。
下 ,将得到不同的结果 ,也就是说 函数的输入输出有多种可能
3)字符类型 。
地 使 用 正 则表 达式 ,不 仅 可 以 快 速 地 查 找 到 与 所 需 特 征 相 匹
以往研究 的程序转换技术主要集 中在 过程式语言到过程 配 的字符 串 ,而且使得程序的代码简化易读 ,用 比较 简便的代
式语言 ,现在 由于面向对象语言的广泛使用 ,因此我们选择经 码 就 可 以 实 现 复 杂 的 逻 辑 。
一 致 ,这就是我们要解决的第 二个难点 ,即如何保证转换后 的
一 个变量的地址称 为该变量 的 “指针 ”。一 个专 f-jf/来
代码与原代码的执行结果绝对完全一致。
存 放 另一 个 变 量 的 地 址 (指 针 )的 变 量 ,称 为 “指 针 变 量 ” ]。
本 文的重点工作就是要解决上述难点 ,在此基础 上 ,完成 根据对 c语 言指针类型 的深入研究 和分析 ,我们 提取 出指针
代码 和遗 产软件转换 为 当前 正在使 用的现 代语 言代码 ,这对 个 “字符 串”是否符合这个 特征 J。正则表达 式可 以用 来 :1)
于升 级 和 完 善 原 有 的 遗 产 系 统 具 有 非 常 重 要 的 意 义 和 价 值 , 验 证字符串是否符合指定 特征 ,比如验 证是否是 合法 的邮 件
取消 了指针 的概念 ,C语言中的大部 分库函数 ,尤其是 我们需
由于各种不同版本的 c语言 的细节 不尽 相同 ,我们下 面 要 转换的通用 函数 库 、以及使 用库 函 数的 C语 言 源程 序 中,
转 换 中 所 指 的 C语 言 是 87 ANSI C(IS0/IEC 9899:1990)。
2)为 了保持对象操作的一致性 和简便性 ,我们不 直接使 用 Java语言 中的 char基本数据 类型包 装类 。我们 将字符 指
针类 型中用到 的 char封装为¥char,定义如下 :
public class¥char( char val; ¥char(char v)f val=v;}
地址相对 的其他地址的增量变 量 ,通过 对首地址 变量与增 量 变量 的计算得到我们需要 的地址指 向。根据指针变量的这个 特点 ,我们用 Java语 言设计 了如下方法来转换 C语言 的指 针 类 型 变 量 :
3 通用 函数库转换方法 的研究和实现
1)通用 函数库 中的指针类 型主要 是字符指针类 型 ,用来 存放字符数组 ,表示一 个字符 串。以下就 以字符指针 类型 为
K ey w ords: regular expression; l ibrary functions of C; prog r am la n guage transformation
0 引 言
1 正 则 表 达 式 简 介
程序 转换技术 是一 种重要 的软件重用技术 。程序转换 是
正则表达式是一种特殊字符 串 ,由普通 字符 (原义 字符 )
(College of Information and Electrical Engineering,Shanghai Normal Unitersity,Sha ng hai 200234,China)
Abstract: The library function of C is very comm on used in program design, while the regular expression has the strong power in string query and matching. AnMyzed the character istics of librar y functions, combined the advantages of  ̄ gula r expressions, design a transformation method to transform library functions of C into Java.The me ̄od resolve the inconsistent problem of data type caused by pointer ty pe of C,ensure that the f inal m s ̄ ts is absolutely consistent with before. Pa s s the test to verify the correctness of the m ethod, effectiveness a n d eff iciency.
第 29卷 2009年 6 月
计 算机 应 用
Journal of Computer Applications
Vo1.29 June 2009
文章 编 号 :1001—9081(2009)S1—0275—04
C语 言 库 函 数 程 序 转 换 方 法
赵 瑾 瑾 ,祝 蜀 平 ,严 忠 林
关键 词 :正则表达式 ;C语 言库函数 ;编程语 言转换 中 图分 类 号 :TP31l 文 献标 志 码 :A
Program transform ation m ethod for library functions Of C
ZHAO Jin—jin,ZHU Shu—ping,YAN Zhong—lin