0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于三叉树链表的编译器中间结构的设计方案研究

牵手一起梦 来源:电子元器件应用 作者:马圣 2020-05-14 09:13 次阅读

引言

IEC61131—3组态软件是分布式控制系统中的上位软件,是工程师与系统的接口,可完成控制系统中现场设备运行的逻辑组态,从而实现对系统的控制。随着PLCDCS系统的应用日趋广泛,IEC6113l一3已经在工业自动化中建立了牢固的国际标准,国内外大部分工业自动化厂商都有提供基于国际标准IEC6113l一3的IEC组态编程系统,IEC组态软件的研发已经成为工业自动化厂商的核心技术。IEC组态软件的实现原理之一是将前端用各种组态语言(ST,LD,FBD,SFC,IL)编写的程序转化成中间结构,再由组态软件编译后端根据不同的硬件平台信息将中间结构编译成在该平台上可执行的目标文件。组态软件编译部分的中间结构是组态软件IEC语言前端与组态软件编译后端的主要接口。好的中间结构可使IEC语言前端做到与目标机器无关,而不依赖于目标机器平台,同时可节省IEC语言前端的翻译工作。现今编译程序使用的中间结构有很多种形式,常见的有逆波兰式、三元式、四元式和树形结构,本文介绍一种基于三叉树链表的中间结构。

1 、总体设计思想

基于树形结构的中间结构是现今大多数编译器中间结构的主流设计方案,比如GCC、LCC、TCC等均使用二叉树或者多又树作为其中间结构。本文介绍的是一种三叉树的设计方案。该方案中,以中间结构表示的高级语言程序单元就是三叉语法树节点组成的多层森林,每一层森林都是一个一维双向链表,链表中的每个“节点”称之为语法树(一棵三叉树),而每棵语法树的节点则称之为树节点。其中,程序单元以POU(程序组织单元)为翻译单位。

每个三叉树节点包括的信息主要有语法树的操作、节点类型、指向三个子树的指针、链表前项与后项指针、关联符号指针等。树节点结构体的数据结构表示如下:

基于三叉树链表的编译器中间结构的设计方案研究

其中,语法操作表示该节点可以完成什么样的“运算”。语法分析树的语法操作符可以分为分别是POU节点操作符、语句操作符和表达式操作符三种类型,这三种类型的语法操作符将在下一节详细介绍,通常可以语法分析树的语法操作来区分不同的语法分析树。

类型是指当前语法分析树所代表的语法操作的类型。

符号指针是指向该节点关联的符号表项,并非所有节点的此项都有内容,具体那些节点中可以关联符号也将在下一节介绍。

图1所示是一个POU程序单元以三叉树链表的中间结构总体表示的总体形式。

采用三叉树森林的方法能够充分的表示正常的高级语言,同时,与其他编译器不同,该方法还引入了POU节点操作符和语句操作符,而省去了前端大量语法翻译的工作,符合IEC工业语言编译器多前端的特征。

2、 中间结构说明

语法分析树的语法操作符可分为POU节点操作符、语句操作符和表达式操作符三种类型。下面来详细介绍这三种语法树节点的各种属性。

2.1 POU节点操作符

POU节点操作符可用于表示POU的开始、结束、作用域和变量定义。各节点属性如表l所列。

其中,语法操作以宏定义的形式声明。符号是该节点关联的符号表项。符号可分为POU符号和变量符号。POU符号包括POU名、参数个数及类型、返回值类型、POU地址等信息;变量符号则包括变量名、类型、作用域和地址等信息。

表l中的唯一节点指整个森林第一层链表中的节点;叶节点指链表中一棵三叉树的叶节点。

2.2 语句操作符

语句操作符分为分支选择操作符、循环操作符、跳出、返回、调用和无条件跳转等。各节点属性如表2所列。

表2中的根节点指森林中一棵三叉树的根节点;中间节点指某三叉树中的中间节点,它既非根节点,也非叶节点。CH00SE的左子节点是条件判定,中子节点是条件为真的内容,右子节点是条件为假的内容。同样,LOOP的左子节点是条件判定,中子节点是循环体,右子节点是循环计数。对于WHILE语句,右子节点可以为空。RETURN的左子节点是返回表达式子树。CALL的左子节点是参数子树,中子节点是调用子树。

2.3 表达式操作符

表达式操作符包括所有的高级语言运算符,如赋值、算术、关系、逻辑运算符等,以赋值、取地址和加法运算符为例,其表达式操作符号主要属性如表3所列。

3 、ST语言代码对应的中间结构表示

本节以一段ST的POU程序为例,将其转化为中间结构,以证明中间结构的可行性。假设此POU中所定义的整型变量为a,b,那么,其POU程序如下:

对应的中间结构如图2所示。其中,EQUAL是等值运算符的宏定义。

4、结束语

本文介绍了一种三叉树的中间结构设计方案。该方案充分考虑了IEC61131—3组态软件的多前端特性,并能够做到不依赖于后端,同时为各语言翻译前端的设计提供了很大的便利。这种中间结构设计在HCC(Hollysys C Compiler)编译器的开发中已经实现,其可行性也得到了验证,并已应用在实际的组态软件开发项目中。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • plc
    plc
    +关注

    关注

    5011

    文章

    13290

    浏览量

    463250
  • 组态软件
    +关注

    关注

    4

    文章

    231

    浏览量

    27052
  • 编译器
    +关注

    关注

    1

    文章

    1634

    浏览量

    49128
收藏 人收藏

    评论

    相关推荐

    自制Voron三叉戟裙灯

    描述Voron三叉戟裙灯PCB
    发表于 09-01 06:58

    基于CoSy的编译器开发的研究

    CoSy是ACE公司开发的编译器构造框架[1]。它提供共享工具和引擎来构造编译器编译器开发者只专注于目标机相关代码的开发。CoSy框架生成的编译器具有可扩展性和可移植性。可以根据目
    发表于 08-19 17:49 0次下载
    基于CoSy的<b class='flag-5'>编译器</b>开发的<b class='flag-5'>研究</b>

    基于八维地质建模系统设计研究李灿辉

    基于八维地质建模系统设计研究_李灿辉
    发表于 03-16 08:00 0次下载

    基于三叉的OFT组密钥管理协议

    针对集中式组播密钥管理协议具有前向安全、后向安全、同谋破解等问题,本文提出了一种基于三叉(Ternary Tree)的OFT组密钥管理协议(T-OFT)。使用三叉的逻辑密钥
    发表于 12-13 16:07 0次下载
    基于<b class='flag-5'>三叉</b><b class='flag-5'>树</b>的OFT组密钥管理协议

    AVL 和普通的二查找的详细区别分析

    那 AVL 和普通的二查找有何区别呢?如图,如果我们插入的是一组有序上升或下降的数据,则一棵普通的二查找必然会退化成一个单
    的头像 发表于 01-15 14:36 5866次阅读
     AVL <b class='flag-5'>树</b>和普通的二<b class='flag-5'>叉</b>查找<b class='flag-5'>树</b>的详细区别分析

    三叉式万向联轴器输出轴的运动规律分析

    针对三叉式万向联轴器传动时输出轴的运动规律问题,建立三叉式万向联轴器系统的坐标系,应用坐标变换技术建立了三叉式万向联轴器输入轴和输出轴的运动方程,推导出了三叉式万向联轴器采用双径向轴承
    发表于 02-26 10:46 0次下载
    <b class='flag-5'>三叉</b>式万向联轴器输出轴的运动规律分析

    三叉杆-球笼式万向联轴器传动轴的运动仿真

    针对三叉杆一球笼式万向联轴器传动轴结构复杂,难以采用传统的图解法、解析法获得其运动规律的问题,采用Pro/E软件,在充分考虑各构件之间的相互约束关系的基础上,对三叉杆一球笼式万向联轴器传动轴整体
    发表于 03-12 11:39 0次下载
    <b class='flag-5'>三叉</b>杆-球笼式万向联轴器传动轴的运动仿真

    详解电源二叉树到底是什么

    作为数据结构的基础,分很多种,像 AVL 、红黑、二搜索....今天我想分享的是关于二
    的头像 发表于 06-06 15:05 1w次阅读
    详解电源二<b class='flag-5'>叉树</b>到底是什么

    CompCert编译器目标代码生成机制研究综述

    CompCert是著名的C语言可信编译器,是经过形式化验证的编译器的杰出代表,近年来被广泛应用于学术界和工业界的许多研发工作中。 Compcert编译器的当前版本支持多种目标机结构。文
    发表于 05-07 10:17 7次下载

    叉排序树AVL如何实现动态平衡

    熟悉的二树种类有二搜索(排序、查找)、二平衡、伸展、红黑
    的头像 发表于 10-28 17:02 1817次阅读
    二<b class='flag-5'>叉排序树</b>AVL如何实现动态平衡

    直线模组3D打印帮助解决三叉

    直线模组3D打印帮助解决三叉痛。三叉痛是非常痛苦的事情。就在近日,神经外科在3D打印导板引导下完成1例球囊压迫术诊治复发三叉痛的患者,标志着我院神经外科在三叉痛准确微创诊治方面又迈向了
    发表于 11-16 16:27 350次阅读

    C语言数据结构:什么是二叉树

    完全二叉树:完全二叉树是效率很高的数据结构。对于深度为K,有n个节点的二叉树,当且仅当每一个节点都与深度为K的满二叉树中编号从1至n的节点一
    的头像 发表于 04-21 16:20 2520次阅读

    PCB设计的Voron三叉戟裙灯

    电子发烧友网站提供《PCB设计的Voron三叉戟裙灯.zip》资料免费下载
    发表于 08-12 10:48 0次下载
    PCB设计的Voron<b class='flag-5'>三叉</b>戟裙灯

    HPC、AI与云计算:当智能时代三叉戟在亚马逊云科技完美融合

    希腊神话中,海神与丰收之神波塞冬手持三叉戟,为航船保驾护航,为农人带来清泉。从此之后,三叉戟经常用来比喻种事物紧密结合,形成合力,比如足球世界很多球队都有经典的锋线三叉戟。 在企业上
    的头像 发表于 08-18 09:19 2275次阅读

    Triton编译器的优化技巧

    (Instruction Selection) Triton 编译器在指令选择阶段采用了先进的算法来生成针对特定硬件架构优化的指令。这一阶段的目标是将高级中间表示(IR)转换为低级机器代码,同时尽可能地利用硬件
    的头像 发表于 12-25 09:09 151次阅读