首页 / 专利库 / 人工智能 / 语言代码 / 交换机专用语言转换为C语言的方法

交换机专用语言转换为C语言的方法

阅读:1026发布:2020-08-25

专利汇可以提供交换机专用语言转换为C语言的方法专利检索,专利查询,专利分析的服务。并且本 发明 提供一种交换机专用语言转换为C语言的方法,所述方法提供预处理模 块 、符号表单元、变换处理模块、注释预处理模块以及注释处理模块,所述预处理模块包括LEX词法分析器和YACC分析程序生成器;所述变换处理模块包括LEX词法分析器和YACC分析程序生成器;所述注释预处理模块包含有LEX词法分析器,其中将交换机专用语言源代码导入预处理模块和注释预处理模块进行处理后获得生产全局符号表和语法树格式的语句以及注释内容,再通过变换处理模块和注释处理模块生成最终的带有注释的C 语言代码 。本发明实现了交换机专用语言转换为C语言,且其C语言还带有注释,可读性高。,下面是交换机专用语言转换为C语言的方法专利的具体信息内容。

1.一种交换机专用语言转换为C语言的方法,其特征在于:所述方法提供预处理模、符号表单元、变换处理模块、注释预处理模块以及注释处理模块,所述预处理模块包括LEX词法分析器和YACC分析程序生成器;所述变换处理模块包括LEX词法分析器和YACC分析程序生成器;所述注释预处理模块包含有LEX词法分析器,其具体步骤如下:
步骤10、将交换机专用语言源代码导入所述预处理模块和注释预处理模块进行处理,所述预处理模块的LEX词法分析器和YACC分析程序生成器对交换机专用语言源代码进行语法、语义分析,分析生产全局符号表和语法树格式的语句,并将全局符号表保存于所述符号表单元;所述注释预处理模块的LEX词法分析器提取所述交换机专用语言源代码的注释内容,并记录行号与注释内容的对应关系;
步骤20、所述变换处理模块将所述语法树格式的语句通过LEX词法分析器和YACC分析程序生成器进行词法、语法分析,且根据所述符号表单元中的全局符号表和C语言的书写规则来生成带行号的C语言代码,同时记录交换机语言源代码和C语言代码之间的行号对应关系,生成一个行号字典;
步骤30、所述注释处理模块将所述注释内容和生产的C语言代码根据所述行号字典和所述行号对应关系进行合并,即将注释内容插入对应行的C语言代码尾部,并除去C语言代码前的行号生成最终的C语言代码。
2.根据权利要求1所述的交换机专用语言转换为C语言的方法,其特征在于:所述步骤20中将所述语法树格式的语句通过LEX词法分析器和YACC分析程序生成器进行词法、语法分析,当语法树格式的语句中有多层嵌套函数时,要对多层嵌套函数进行展开转换处理,其具体为:先将局部变量、形参变量和上层函数的结构体指针,封装并定义成一个结构体类型;当多层嵌套函数中存在局部变量或者形参变量,则在每层函数开始处定义一个所述结构体类型的结构体变量,并对结构体中的成员变量进行赋值;在调用下层函数的地方,增加一个实参即本层函数的结构体变量的地址;最后将每层函数进行展开转换。
3.根据权利要求2所述的交换机专用语言转换为C语言的方法,其特征在于:所述当每层函数展开时会遇到函数符号名重名的问题,其通过以下步骤解决:
步骤20、遇到全局符号不进行重命名;
步骤21、第一次遇到的local符号不能与全局符合重名,且不能与之后遇到的local符号重名;即local符号名字第一次出现时名字保持不变,之后遇到的local符号分别加入后缀_1,_2,..._n;
步骤22、local符号中,对于SYN/PROC类型的符号,需要加入static存储类型。

说明书全文

交换机专用语言转换为C语言的方法

【技术领域】

[0001] 本发明涉及计算机的交换机专用语言技术领域,尤其涉及一种交换机专用语言转换为C语言的方法。【背景技术】
[0002] 目前运行的旧的大型程控交换机,大多使用专用硬件和交换机专用语言。但随着计算机硬件的更新换代,以及通用高级语言的普及。旧的大型程控交换机面临硬件升级、专用语言的编译器升级以及运行效率等问题。这些问题都迫切要求交换机专用语言转换为通用高级语言(如C、C++语言),以便系统的维护和功能升级。
[0003] 高级语言的转换原理,和编译器的原理是一样的。基本是都是通过词法分析、语法分析,再借助符号表转换为一种中间表示,最终再组装为另一种语言的表示。但是交换机专用语言具有其特殊的地方,如专用语言比较复杂,没有注释处理,可读性很低;现有各高级语言中,基本上都是以Byte为单位来处理,只有某些编译器,如gcc(编译器),使用“_attribute_((packed))”来指定数据类型的特殊内存方式。但是交换机专用语言的“PACK/NO_PACK”规则远比这个复杂,这个导致语言转换的困难。通常的语言转换工具并没有对此提出好的方法。
[0004] 目前,摘自1993年第3期的《计算机学报》中有一论文涉及CHILL(全称CCITT High Level Language,CHILL高级语言)到C语言的转换,其特点是:第一趟程序即前端程序,主要完成词法分析、语法分析、语义分析、一致性检查、错误处理、符号表建立等功能,该趟程序的输出结果是一些内部表格和中间文件;第二趟程序即CHILL/C转换程序,它以中间文件及内部表格作为输入,按照转换规则生成C程序;第三趟程序利用C语言编译程序把产生的C程序和并发库链接生成目标代码,并发库主要是为支持CHILL的并发处理功能而实现的一些预定义子程序。该方法也是常规的通过词法分析、语法分析,再借助符号表转换为一种中间表示,最终再组装为另一种语言的表示。【发明内容】
[0005] 本发明要解决的技术问题,在于提供一种交换机专用语言转换为C语言的方法,该方法实现了转换后的C语言带有注释,可读性高,且实现了多层嵌套函数进行展开转换处理,使得代码的移植性高。
[0006] 本发明是这样实现的:一种交换机专用语言转换为C语言的方法,所述方法提供预处理模、符号表单元、变换处理模块、注释预处理模块以及注释处理模块,所述预处理模块包括LEX词法分析器和YACC分析程序生成器;所述变换处理模块包括LEX词法分析器和YACC分析程序生成器;所述注释预处理模块包含有LEX词法分析器,其具体步骤如下:
[0007] 步骤10、将交换机专用语言源代码导入所述预处理模块和注释预处理模块进行处理,所述预处理模块的LEX词法分析器和YACC分析程序生成器对交换机专用语言源代码进行语法、语义分析,分析生产全局符号表和语法树格式的语句,并将全局符号表保存于所述符号表单元;所述注释预处理模块的LEX词法分析器提取所述交换机专用语言源代码的注释内容,并记录行号与注释内容的对应关系;
[0008] 步骤20、所述变换处理模块将所述语法树格式的语句通过LEX词法分析器和YACC分析程序生成器进行词法、语法分析,且根据所述符号表单元中的全局符号表和C语言的书写规则来生成带行号的C语言代码,同时记录交换机语言源代码和C语言代码之间的行号对应关系,生成一个行号字典;
[0009] 步骤30、所述注释处理模块将所述注释内容和生产的C语言代码根据所述行号字典和所述行号对应关系进行合并,即将注释内容插入对应行的C语言代码尾部,并除去C语言代码前的行号生成最终的C语言代码。
[0010] 进一步的,所述步骤20中将所述语法树格式的语句通过LEX词法分析器和YACC分析程序生成器进行词法、语法分析,当语法树格式的语句中有多层嵌套函数时,要对多层嵌套函数进行展开转换处理,其具体为:先将局部变量、形参变量和上层函数的结构体指针,封装并定义成一个结构体类型;当多层嵌套函数中存在局部变量或者形参变量,则在每层函数开始处定义一个所述结构体类型的结构体变量,并对结构体中的成员变量进行赋值;在调用下层函数的地方,增加一个实参即本层函数的结构体变量的地址;最后将每层函数进行展开转换。
[0011] 进一步的,所述当每层函数展开时会遇到函数符号名重名的问题,其通过以下步骤解决:
[0012] 步骤20、遇到全局符号不进行重命名;
[0013] 步骤21、第一次遇到的local符号不能与全局符合重名,且不能与之后遇到的local符号重名;即local符号名字第一次出现时名字保持不变,之后遇到的local符号分别加入后缀_1,_2,..._n;
[0014] 步骤22、local符号中,对于SYN/PROC类型的符号,需要加入static存储类型。
[0015] 本发明具有如下优点:本发明交换机专用语言转换为C语言的方法,所述方法提供预处理模块、符号表单元、变换处理模块、注释预处理模块以及注释处理模块,所述预处理模块包括LEX词法分析器和YACC分析程序生成器;所述变换处理模块包括LEX词法分析器和YACC分析程序生成器;所述注释预处理模块包含有LEX词法分析器,其中将交换机专用语言源代码导入预处理模块和注释预处理模块进行处理后获得生产全局符号表和语法树格式的语句以及注释内容,再通过变换处理模块和注释处理模块生成最终的带有注释的C语言代码,当语法树格式的语句中有多层嵌套函数时,要对多层嵌套函数进行展开转换处理,该方法实现了交换机专用语言转换为C语言,其转换后的C语言带有注释,其可读性高,且实现了多层嵌套函数进行展开转换处理,使得代码的移植性高。【附图说明】
[0016] 图1为本发明交换机语言转换的流程框架图。【具体实施方式】
[0017] 请参阅图1所示,本发明的交换机专用语言转换为C语言的方法,所述方法提供预处理模块、符号表单元、变换处理模块、注释预处理模块以及注释处理模块,所述预处理模块包括LEX词法分析器和YACC分析程序生成器;所述变换处理模块包括LEX词法分析器和YACC分析程序生成器;所述注释预处理模块包含有LEX词法分析器,其具体步骤如下:
[0018] 步骤10、将交换机专用语言源代码导入所述预处理模块和注释预处理模块进行处理,所述预处理模块的LEX词法分析器和YACC分析程序生成器对交换机专用语言源代码进行语法、语义分析,分析生产全局符号表和语法树格式的语句,并将全局符号表保存于所述符号表单元;所述注释预处理模块的LEX词法分析器提取所述交换机专用语言源代码的注释内容,并记录行号与注释内容的对应关系;
[0019] 步骤20、所述变换处理模块将所述语法树格式的语句通过LEX词法分析器和YACC分析程序生成器进行词法、语法分析,当语法树格式的语句中有多层嵌套函数时,要对多层嵌套函数进行展开转换处理,其具体为:先将局部变量、形参变量和上层函数的结构体指针,封装并定义成一个结构体类型;当多层嵌套函数中存在局部变量或者形参变量,则在每层函数开始处定义一个所述结构体类型的结构体变量,并对结构体中的成员变量进行赋值;在调用下层函数的地方,增加一个实参即本层函数的结构体变量的地址;最后将每层函数进行展开转换;且根据所述符号表单元中的全局符号表和C语言的书写规则来生成带行号的C语言代码,同时记录交换机语言源代码和C语言代码之间的行号对应关系,生成一个行号字典;其中所述当每层函数展开时会遇到函数符号名重名的问题,其通过以下步骤解决:
[0020] 步骤20、遇到全局符号不进行重命名;
[0021] 步骤21、第一次遇到的local(本地)符号不能与全局符合重名,且不能与之后遇到的local符号重名;即local符号名字第一次出现时名字保持不变,之后遇到的local符号分别加入后缀_1,_2,..._n;
[0022] 步骤22、local符号中,对于SYN/PROC类型的符号,需要加入static存储类型。
[0023] 步骤30、所述注释处理模块将所述注释内容和生产的C语言代码根据所述行号字典和所述行号对应关系进行合并,即将注释内容插入对应行的C语言代码尾部,并除去C语言代码前的行号生成最终的C语言代码。
[0024] 值得一提的是:传统的语言转换工具都是以Byte为单位来处理,这样的处理受硬件内存的限制,大量数据结构采用union(共用体)的方式,这样转换出来的数据正确性无法保证。为了解决这个问题,在所述步骤20中将所述语法树格式的语句通过LEX词法分析器和YACC分析程序生成器进行词法、语法分析,当语法树格式的语句中使用关键字“PACK/NO_PACK”来指定数据的内存结构时要进行转换处理,其具体为:1、总结交换机专用语言各种数据类型的PACK/NO_PACK的bit位图,形成交换机语言的PACK/NO_PACK规则表。2、总结C语言(GCC)各种数据类型的PACK/NO_PACK的bit位图,形成GCC的PACK/NO_PACK规则表。3、根据交换机语言的PACK/NO_PACK规则表和GCC的PACK/NO_PACK规则表将交换机专用语言到C语言的两者对应的bit位图映射关系起来。
[0025] 1、总结交换机专用语言各种数据类型的PACK/NO_PACK的bit位图,形成交换机语言的PACK/NO_PACK规则表。其主要是通过查看各种类型的变量内存排列,当使用关键字“PACK/NO_PACK”定义各种基本数据类型变量时,通过查看内存的实际分布,画出对应的内存bit位图。从而归纳出各种数据类型的PACK/NO_PACK的规则表。
[0026] 其交换机专用语言(如CHILL语言)常用数据类型的PACK/NO_PACK规则表如下表1:
[0027] 表1
[0028]
[0029]
[0030] 2、总结C语言(GCC)各种数据类型的PACK/NO_PACK的bit位图,形成GCC的PACK/NO_PACK规则表。(注:C语言的PACK/NO_PACK是指是否使用了GCC的“_attribute_((packed))”来修饰一个变量的定义。)其主要是:调查GCC各种数据类型的PACK/NO_PACK的规则,可以参考GCC的相关文档,然后在实机上进行内存bit排列的验证,形成C语言(GCC)常用数据类型的PACK/NO_PACK规则表。(但是这里要注意的是,最终C代码运行的CPU类型的不同,可能字节序不同。例如X86的字节序是LittleEndia(类型定义关键),PowerPC(微处理器架构)可能是BigEndia(类型定义关键)。字节序不同,PACK/NO_PACK规则形成的内存bit位图也不同。)其C语言(GCC)常用数据类型的PACK/NO_PACK规则表如表2所示:
[0031] 表2
[0032]
[0033]
[0034] 3、交换机专用语言到C语言的对应bit位图映射。主要是:在总结了“交换机专用语言”和“C语言”的“PACK/NO_PACK规则”后,进一步就可以制作出两者对应的bit位图映射关系。注意映射时需要区分目标机的字节序是BigEndia还是LittleEndia。
[0035] 本发明实现了交换机专用语言转换为C语言的方法,其中传统的在专用语言中有涉及多层嵌套函数的转换时,不进行展开处理,这样导致代码的移植性问题,因为只有某些编译器支持多层嵌套函数,本发明进行了多层嵌套函数进行展开转换处理,使得代码的移植性高,且现有的语言转换基本不涉及注释部分,导致代码可读性大大降低,且以PACK/NO_PACK关键字来处理,这样转换出来的数据正确性比较高。
[0036] 以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈