[发明专利]交换机专用语言转换为C语言的方法有效
申请号: | 201110184838.7 | 申请日: | 2011-07-01 |
公开(公告)号: | CN102222004A | 公开(公告)日: | 2011-10-19 |
发明(设计)人: | 林居京;陈益林;林团;林铿;伍琰华;吴坤雄;陈浚 | 申请(专利权)人: | 福建富士通信息软件有限公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 福州市鼓楼区京华专利事务所(普通合伙) 35212 | 代理人: | 宋连梅 |
地址: | 350000 福建*** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 交换机 专用 语言 转换 方法 | ||
【技术领域】
本发明涉及计算机的交换机专用语言技术领域,尤其涉及一种交换机专用语言转换为C语言的方法。
【背景技术】
目前运行的旧的大型程控交换机,大多使用专用硬件和交换机专用语言。但随着计算机硬件的更新换代,以及通用高级语言的普及。旧的大型程控交换机面临硬件升级、专用语言的编译器升级以及运行效率等问题。这些问题都迫切要求交换机专用语言转换为通用高级语言(如C、C++语言),以便系统的维护和功能升级。
高级语言的转换原理,和编译器的原理是一样的。基本是都是通过词法分析、语法分析,再借助符号表转换为一种中间表示,最终再组装为另一种语言的表示。但是交换机专用语言具有其特殊的地方,如专用语言比较复杂,没有注释处理,可读性很低;现有各高级语言中,基本上都是以Byte为单位来处理,只有某些编译器,如gcc(编译器),使用“_attribute_((packed))”来指定数据类型的特殊内存方式。但是交换机专用语言的“PACK/NO_PACK”规则远比这个复杂,这个导致语言转换的困难。通常的语言转换工具并没有对此提出好的方法。
目前,摘自1993年第3期的《计算机学报》中有一论文涉及CHILL(全称CCITT High Level Language,CHILL高级语言)到C语言的转换,其特点是:第一趟程序即前端程序,主要完成词法分析、语法分析、语义分析、一致性检查、错误处理、符号表建立等功能,该趟程序的输出结果是一些内部表格和中间文件;第二趟程序即CHILL/C转换程序,它以中间文件及内部表格作为输入,按照转换规则生成C程序;第三趟程序利用C语言编译程序把产生的C程序和并发库链接生成目标代码,并发库主要是为支持CHILL的并发处理功能而实现的一些预定义子程序。该方法也是常规的通过词法分析、语法分析,再借助符号表转换为一种中间表示,最终再组装为另一种语言的表示。
【发明内容】
本发明要解决的技术问题,在于提供一种交换机专用语言转换为C语言的方法,该方法实现了转换后的C语言带有注释,可读性高,且实现了多层嵌套函数进行展开转换处理,使得代码的移植性高。
本发明是这样实现的:一种交换机专用语言转换为C语言的方法,所述方法提供预处理模块、符号表单元、变换处理模块、注释预处理模块以及注释处理模块,所述预处理模块包括LEX词法分析器和YACC分析程序生成器;所述变换处理模块包括LEX词法分析器和YACC分析程序生成器;所述注释预处理模块包含有LEX词法分析器,其具体步骤如下:
步骤10、将交换机专用语言源代码导入所述预处理模块和注释预处理模块进行处理,所述预处理模块的LEX词法分析器和YACC分析程序生成器对交换机专用语言源代码进行语法、语义分析,分析生产全局符号表和语法树格式的语句,并将全局符号表保存于所述符号表单元;所述注释预处理模块的LEX词法分析器提取所述交换机专用语言源代码的注释内容,并记录行号与注释内容的对应关系;
步骤20、所述变换处理模块将所述语法树格式的语句通过LEX词法分析器和YACC分析程序生成器进行词法、语法分析,且根据所述符号表单元中的全局符号表和C语言的书写规则来生成带行号的C语言代码,同时记录交换机语言源代码和C语言代码之间的行号对应关系,生成一个行号字典;
步骤30、所述注释处理模块将所述注释内容和生产的C语言代码根据所述行号字典和所述行号对应关系进行合并,即将注释内容插入对应行的C语言代码尾部,并除去C语言代码前的行号生成最终的C语言代码。
进一步的,所述步骤20中将所述语法树格式的语句通过LEX词法分析器和YACC分析程序生成器进行词法、语法分析,当语法树格式的语句中有多层嵌套函数时,要对多层嵌套函数进行展开转换处理,其具体为:先将局部变量、形参变量和上层函数的结构体指针,封装并定义成一个结构体类型;当多层嵌套函数中存在局部变量或者形参变量,则在每层函数开始处定义一个所述结构体类型的结构体变量,并对结构体中的成员变量进行赋值;在调用下层函数的地方,增加一个实参即本层函数的结构体变量的地址;最后将每层函数进行展开转换。
进一步的,所述当每层函数展开时会遇到函数符号名重名的问题,其通过以下步骤解决:
步骤20、遇到全局符号不进行重命名;
步骤21、第一次遇到的local符号不能与全局符合重名,且不能与之后遇到的local符号重名;即local符号名字第一次出现时名字保持不变,之后遇到的local符号分别加入后缀_1,_2,..._n;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于福建富士通信息软件有限公司,未经福建富士通信息软件有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110184838.7/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种安全小刀
- 下一篇:带有LED灯的裁纸弯刀