[发明专利]一种应用于高速数字IO波形引擎的编译器有效
申请号: | 201210560608.0 | 申请日: | 2012-12-20 |
公开(公告)号: | CN103019801A | 公开(公告)日: | 2013-04-03 |
发明(设计)人: | 王凯;王石记;刘金川;史浩;辛丽霞 | 申请(专利权)人: | 北京航天测控技术有限公司 |
主分类号: | G06F9/45 | 分类号: | G06F9/45 |
代理公司: | 北京理工大学专利中心 11120 | 代理人: | 杨志兵;高燕燕 |
地址: | 100041 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 应用于 高速 数字 io 波形 引擎 编译器 | ||
技术领域
本发明属于软件编译算法领域,特别涉及一种应用于高速数字IO波形引擎的小型编译器。
背景技术
在传统意义上,仪器厂商为用户提供控制程序或者驱动程序都以函数和属性为单位,这些函数和属性都偏重于实现某一项或几项特定功能,用户仅可固定使用厂商提供的控制方式而不能将更底层的功能按照自己的需求任意组合,这样就对用户的使用方式做出了限制,无法满足用户更高层次的需求。例如,用户需要使用高速数字IO模块提供的原有函数实现多个波形带有多个marker标记,同时满足多个触发条件,还要实现N层循环嵌套和条件分支,这几乎是不可能实现的。本申请人于2011年12月20日提出了一项专利申请“一种用于任意波形产生系统的处理器”(申请号为201110430689.8),该申请提供了一种精简指令集的高速数字IO波形引擎,该引擎只采用Generate、Repeat/end Repeat、If/end If、Wait、Clear这几条简单的指令即可覆盖波形引擎的绝大部分功能需求。
在采用上述精简指令集进行程序代码编写完成后,需要对程序代码进行编译,从而转化为二进制目标码。一般编译过程分为词法分析,语法分析,语法制导翻译,中间码生成,存储管理,代码优化和目标代码生成过程。而且由于编译器比较复杂,因此编译过程通常是在上位机上完成的,编译完成后将目标码下载到下位机运行。
传统编译方法所面临的问题:
1、执行这些步骤的过程中,会生成堆栈,链表,二叉树等结构变量,需要大量内存空间来存储这些变量,这些资源大多需要预先申请,用户编写代码过长过短都会造成空间浪费。
2、需要通过上位机完成程序编译之后才能通过总线发送到下位机执行,是因为上述过程对速度和空间的要求较高,下位机一般无法提供上述步骤所需要的足够的资源完成编译过程。
3、传统编译过程的环节比较多,且是顺序执行的关系,下一个步骤的输入依赖于上一个步骤的输出,如果上一个步骤的结果不符合语法定义的规则,下一个步骤将不能正常执行,这时候环境将会停止编译并报错返回。这样繁冗的操作是为了整个IDE环境的稳定,但是对于用户来讲相当于增加了诸多的限制,而且越往后面的步骤报错之后用户越是无法干预,甚至迷惑不解。
发明内容
有鉴于此,本发明提供了一种应用于高速数字IO波形引擎的小型编译器,能够简化编译过程,减小编译器大小,在编译过程中使用资源可灵活申请,不会浪费,且该编译器能够设置在下位机中,免去了上位机编译下载过程,减少开销和调试时间。
为了解决上述技术问题,本发明是这样实现的:
一种应用于高速数字IO波形引擎的小型编译器,该编译器包括第一模块、第二模块和第三模块;
第一模块,用于关键字和变量的识别及分类处理;具体为:读取待编译程序,进行逐字处理;
如果当前读取到的为关键字,则按照预先设定的关键字使用规则,先对关键字的前后词句进行检查,看其是否符合语法定义;如果不符合,则停止编译并返回相应错误码;如果符合,则将当前关键字对应的出现次数变量加1,并且在顺序链表L0的尾部增加一个结点,将当前关键字的代码添加到尾部结点中;如果当前关键字具有参数,则将参数记录到第一参数数组,并在当前关键字的链表结点中记录参数在第一参数数组中的索引;
如果当前读取到的为特殊符号,包括begin、end、小括号、大括号、双引号、分号,则将当前特殊符号对应的出现次数变量加1,并且在顺序链表L0的尾部增加一个结点,将当前特殊符号的代码添加到尾部结点中;
第二模块,用于语法检查和代码优化;具体为:
所述语法检查包括:检验关键字和特殊符号对应的出现次数变量的值是否与顺序链表L0中相应关键字和特殊符号出现次数相同;根据顺序链表L0中具有配对关系的特殊符号的出现次数和位置检验配对关系是否正常;如果语法检查有错误,则停止编译并返回相应错误码;
所述代码优化为:将所述第一参数数组中的元素转化为参数链表中的结点,采用参数链表结点地址代替顺序链表L0中的第一参数数组索引;释放第一参数数组空间;
第三模块,用于实现目标代码生成;具体为:
逐个访问顺序链表L0中的每个结点,如果当前结点为关键字且没有参数,则直接根据目标码生成规则生成目标码,如果当前结点为关键字且有参数,则根据结点中记录的参数链表结点地址,从参数链表中提取参数,将关键字与参数组合后根据目标码生成规则生成目标码;如果当前结点为特殊符号,则直接根据目标码生成规则生成目标码。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航天测控技术有限公司,未经北京航天测控技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210560608.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种新型机械式气动侧规
- 下一篇:零件可一体印刷的注塑结构