吴忠躺衫网络科技有限公司

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
    +關注

    關注

    5016

    文章

    13387

    瀏覽量

    465381
  • 組態軟件
    +關注

    關注

    4

    文章

    231

    瀏覽量

    27100
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49283
收藏 人收藏

    評論

    相關推薦

    自制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 ?5944次閱讀
     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 ?1904次閱讀
    二<b class='flag-5'>叉排序樹</b>AVL如何實現動態平衡

    直線模組3D打印幫助解決三叉

    直線模組3D打印幫助解決三叉痛。三叉痛是非常痛苦的事情。就在近日,神經外科在3D打印導板引導下完成1例球囊壓迫術診治復發三叉痛的患者,標志著我院神經外科在三叉痛準確微創診治方面又邁向了
    發表于 11-16 16:27 ?369次閱讀

    C語言數據結構:什么是二叉樹

    完全二叉樹:完全二叉樹是效率很高的數據結構。對于深度為K,有n個節點的二叉樹,當且僅當每一個節點都與深度為K的滿二叉樹中編號從1至n的節點一
    的頭像 發表于 04-21 16:20 ?2698次閱讀

    PCB設計的Voron三叉戟裙燈

    電子發燒友網站提供《PCB設計的Voron三叉戟裙燈.zip》資料免費下載
    發表于 08-12 10:48 ?0次下載
    PCB設計的Voron<b class='flag-5'>三叉</b>戟裙燈

    HPC、AI與云計算:當智能時代三叉戟在亞馬遜云科技完美融合

    希臘神話中,海神與豐收之神波塞冬手持三叉戟,為航船保駕護航,為農人帶來清泉。從此之后,三叉戟經常用來比喻種事物緊密結合,形成合力,比如足球世界很多球隊都有經典的鋒線三叉戟。 在企業上
    的頭像 發表于 08-18 09:19 ?2313次閱讀

    Triton編譯器的優化技巧

    (Instruction Selection) Triton 編譯器在指令選擇階段采用了先進的算法來生成針對特定硬件架構優化的指令。這一階段的目標是將高級中間表示(IR)轉換為低級機器代碼,同時盡可能地利用硬件
    的頭像 發表于 12-25 09:09 ?340次閱讀
    百家乐官网庄家必赢诀窍| 百家乐博彩开户博彩通| 易发国际娱乐城| 新世百家乐的玩法技巧和规则| 百家乐官网游戏技巧| 大发888下载官方| 百家乐和局投注法| 中华百家乐官网娱乐城| 百家乐888| 大赢家百家乐的玩法技巧和规则| 百家乐官网稳赢战术技巧| 托里县| 威尼斯人娱乐客户端| 星河百家乐现金网| 百家乐官网赌场策略大全| 网上真钱赌博| bet365提款限制| 皇冠现金网哪个最好| 太阳百家乐娱乐| 伯爵百家乐娱乐网| 百家乐投注庄闲法| 百家乐官网网上赌场| 百家乐官网号技巧| 新加坡百家乐官网赌法| 银泰百家乐官网龙虎斗| 新濠百家乐的玩法技巧和规则| 百家乐存1000送| 七乐百家乐官网现金网| 长沙县| 百家乐官网视频桌球| 南京市| 百家乐官网洗码全讯网| 玩百家乐官网技巧博客| 太阳城百家乐官网赌博害人| 百家乐官网注册送10彩金| 澳门百家乐官网职业| 百家乐官网怎么| 亚洲百家乐官网博彩的玩法技巧和规则 | 最新娱乐城送彩金| 六合彩全年资料| 皇冠正网开户|