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

技术编号:6801152 阅读:683 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种交换机专用语言转换为C语言的方法,所述方法提供预处理模块、符号表单元、变换处理模块、注释预处理模块以及注释处理模块,所述预处理模块包括LEX词法分析器和YACC分析程序生成器;所述变换处理模块包括LEX词法分析器和YACC分析程序生成器;所述注释预处理模块包含有LEX词法分析器,其中将交换机专用语言源代码导入预处理模块和注释预处理模块进行处理后获得生产全局符号表和语法树格式的语句以及注释内容,再通过变换处理模块和注释处理模块生成最终的带有注释的C语言代码。本发明专利技术实现了交换机专用语言转换为C语言,且其C语言还带有注释,可读性高。

【技术实现步骤摘要】
交换机专用语言转换为C语言的方法
本专利技术涉及计算机的交换机专用语言
,尤其涉及一种交换机专用语言转换为C语言的方法。
技术介绍
目前运行的旧的大型程控交换机,大多使用专用硬件和交换机专用语言。但随着计算机硬件的更新换代,以及通用高级语言的普及。旧的大型程控交换机面临硬件升级、专用语言的编译器升级以及运行效率等问题。这些问题都迫切要求交换机专用语言转换为通用高级语言(如C、C++语言),以便系统的维护和功能升级。高级语言的转换原理,和编译器的原理是一样的。基本是都是通过词法分析、语法分析,再借助符号表转换为一种中间表示,最终再组装为另一种语言的表示。但是交换机专用语言具有其特殊的地方,如专用语言比较复杂,没有注释处理,可读性很低;现有各高级语言中,基本上都是以Byte为单位来处理,只有某些编译器,如gcc (编译器),使用“_ attributeJbacked)) ”来指定数据类型的特殊内存方式。但是交换机专用语言的“PACK/ N0_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,..._11;步骤22、local符号中,对于SYN/PR0C类型的符号,需要加入static存储类型。本专利技术具有如下优点本专利技术交换机专用语言转换为C语言的方法,所述方法提供预处理模块、符号表单元、变换处理模块、注释预处理模块以及注释处理模块,所述预处理模块包括LEX词法分析器和YACC分析程序生成器;所述变换处理模块包括LEX词法分析器和YACC分析程序生成器;所述注释预处理模块包含有LEX词法分析器,其中将交换机专用语言源代码导入预处理模块和注释预处理模块进行处理后获得生产全局符号表和语法树格式的语句以及注释内容,再通过变换处理模块和注释处理模块生成最终的带有注释的 C语言代码,当语法树格式的语句中有多层嵌套函数时,要对多层嵌套函数进行展开转换处理,该方法实现了交换机专用语言转换为C语言,其转换后的C语言带有注释,其可读性高, 且实现了多层嵌套函数进行展开转换处理,使得代码的移植性高。附图说明图1为本专利技术交换机语言转换的流程框架图。具体实施方式请参阅图1所示,本专利技术的交换机专用语言转换为C语言的方法,所述方法提供预处理模块、符号表单元、变换处理模块、注释预处理模块以及注释处理模块,所述预处理模块包括LEX词法分析器和YACC分析程序生成器;所述变换处理模块包括LEX词法分析器和 YACC分析程序生成器;所述注释预处理模块包含有LEX词法分析器,其具体步骤如下步骤10、将交换机专用语言源代码导入所述预处理模块和注释预处理模块进行处理,所述预处理模块的LEX词法分析器和YACC分析程序生成器对交换机专用语言源代码进行语法、语义分析,分析生产全局符号表和语法树格式的语句,并将全局符号表保存于所述符号表单元;所述注释预处理模块的LEX词法分析器提取所述交换机专用语言源代码的注释内容,并记录行号与注释内容的对应关系;步骤20、所述变换处理模块将所述语法树格式的语句通过LEX词法分析器和YACC 分析程序生成器进行词法、语法分析,当语法树格式的语句中有多层嵌套函数时,要对多层嵌套函数进行展开转换处理,其具体为先将局部变量、形参变量和上层函数的结构体指针,封装并定义成一个结构体类型;当多层嵌套函数中存在局部变量或者形参变量,则在每层函数开始处定义一个所述结构体类型的结构体变量,并对结构体中的成员变量进行赋值;在调用下层函数的地方,增加一个实参即本层函数的结构体变量的地址;最后将每层函数进行展开转换;且根据所述符号表单元中的全局符号表和C语言的书写规则来生成带行号的C语言代码,同时记录交换机语言源代码和C语言代码之间的行号对应关系,生成一个行号字典;其中所述当每层函数展开时会遇到函数符号名重名的问题,其通过以下步骤解决步骤20、遇到全局符号不进行重命名;步骤21、第一次遇到的lo本文档来自技高网
...

【技术保护点】
1.一种交换机专用语言转换为C语言的方法,其特征在于:所述方法提供预处理模块、符号表单元、变换处理模块、注释预处理模块以及注释处理模块,所述预处理模块包括LEX词法分析器和YACC分析程序生成器;所述变换处理模块包括LEX词法分析器和YACC分析程序生成器;所述注释预处理模块包含有LEX词法分析器,其具体步骤如下:步骤10、将交换机专用语言源代码导入所述预处理模块和注释预处理模块进行处理,所述预处理模块的LEX词法分析器和YACC分析程序生成器对交换机专用语言源代码进行语法、语义分析,分析生产全局符号表和语法树格式的语句,并将全局符号表保存于所述符号表单元;所述注释预处理模块的LEX词法分析器提取所述交换机专用语言源代码的注释内容,并记录行号与注释内容的对应关系;步骤20、所述变换处理模块将所述语法树格式的语句通过LEX词法分析器和YACC分析程序生成器进行词法、语法分析,且根据所述符号表单元中的全局符号表和C语言的书写规则来生成带行号的C语言代码,同时记录交换机语言源代码和C语言代码之间的行号对应关系,生成一个行号字典;步骤30、所述注释处理模块将所述注释内容和生产的C语言代码根据所述行号字典和所述行号对应关系进行合并,即将注释内容插入对应行的C语言代码尾部,并除去C语言代码前的行号生成最终的C语言代码。...

【技术特征摘要】

【专利技术属性】
技术研发人员:林居京陈益林林团林铿伍琰华吴坤雄陈浚
申请(专利权)人:福建富士通信息软件有限公司
类型:发明
国别省市:35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1