一种临时变量的数据区分配方法

    公开(公告)号:CN108804222A

    公开(公告)日:2018-11-13

    申请号:CN201810329161.3

    申请日:2018-04-13

    IPC分类号: G06F9/50 G06F8/41

    CPC分类号: G06F9/5016 G06F8/41

    摘要: 本发明公开一种临时变量的数据区分配方法,步骤是:首次编译形成指令时,临时变量采用不重复的最大化分配策略;遍历临时变量数据区,遍历指令区,获取各个临时变量的首次引用及最后引用的指令行号,形成每个临时变量的作用域;对按照变量类型组织的各子组进行临时变量合并:对同组内时作用域无交集的临时变量按照最近邻合并贪心算法进行合并,合并为1个子集的临时变量分配同一个虚拟寄存器;调整指令,将指令区的各个临时变量替换为对应虚拟寄存器;汇总虚拟寄存器,并删除原临时变量区,用新的虚拟寄存器组替换。此种方法在编译IEC61131的ST代码时,能精简临时变量数据区,减少数据区大小,满足嵌入式系统资源有限的约束。

    一种计算机程序语言的编译方法和编译器

    公开(公告)号:CN107301079A

    公开(公告)日:2017-10-27

    申请号:CN201710365323.4

    申请日:2017-05-22

    IPC分类号: G06F9/45

    摘要: 本发明实施例公开了一种计算机程序语言的编译方法,包括:对结构化文本ST语言的循环语句进行预处理后,至少获取循环语句的初始值表达式、终止值表达式、循环增量表达式和循环执行语句;对初始值表达式和终止值表达式分别进行编译,得到初始值表达式的值和终止值表达式的值;将初始值表达式的值确定为循环语句的索引值;基于循环增量表达式的类型,从初始值表达式的值和终止值表达式的值中确定出循环语句的上界和循环语句的下界;基于循环语句的上界、循环语句的下界、循环语句的索引值和循环增量表达式,对循环执行语句进行编译,得到循环语句的编译结果。本发明实施例还同时公开了一种编译器。