[發(fā)明專利]一種語法樹層次化表示方法在審
| 申請?zhí)枺?/td> | 201710200792.0 | 申請日: | 2017-03-30 |
| 公開(公告)號: | CN107133027A | 公開(公告)日: | 2017-09-05 |
| 發(fā)明(設(shè)計(jì))人: | 張磊;陳宏君;文繼鋒;周磊;譚良良 | 申請(專利權(quán))人: | 南京南瑞繼保電氣有限公司;南京南瑞繼保工程技術(shù)有限公司 |
| 主分類號: | G06F9/44 | 分類號: | G06F9/44;G06F9/45 |
| 代理公司: | 南京經(jīng)緯專利商標(biāo)代理有限公司32200 | 代理人: | 葛瀟敏 |
| 地址: | 211102 江*** | 國省代碼: | 江蘇;32 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 語法 層次 表示 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明屬于編譯器處理領(lǐng)域,具體涉及一種IEC61131文本編程語言的語法樹表示方法。
背景技術(shù)
當(dāng)前C/C++/JAVA等語言對應(yīng)的編譯器開發(fā)技術(shù)已經(jīng)成熟,上述語言均可基于GCC實(shí)現(xiàn)不同處理器的目標(biāo)文件形成。在工業(yè)控制中,IEC61131是通用的標(biāo)準(zhǔn),定義了結(jié)構(gòu)化文本ST、指令表IL的文本型編程語言,是工控領(lǐng)域的安全子集語言,有對應(yīng)的語法和文法定義。通用的編譯器例如GCC并不支持工控專用的語言編譯。可基于flex+bison實(shí)現(xiàn)61131文本語言的詞法和語法分析,并形成語法樹,之后開發(fā)語義分析和后端指令輸出模塊。這其中語法樹是非常重要的數(shù)據(jù)結(jié)構(gòu),語法樹是語法分析階段形成的內(nèi)存數(shù)據(jù)結(jié)構(gòu),當(dāng)源程序代碼量大時,語法樹也非常龐大,直接基于內(nèi)存的斷點(diǎn)調(diào)試獲取多級層次結(jié)構(gòu)存在不直觀、不透明的障礙。已有的語法樹中間表示方法,是形成平層化的文本內(nèi)容,用文本編輯器或Excel打開查看,通過縮進(jìn)來表示層次關(guān)系,當(dāng)語法樹層級關(guān)系深或節(jié)點(diǎn)多時,依然存在不夠清晰、無法折疊展開的問題。需要一種能等價表示層次語法樹的方法,以提高編譯器開發(fā)過程中問題診斷和分析的效率,本案由此產(chǎn)生。
發(fā)明內(nèi)容
本發(fā)明的目的,在于提供一種語法樹層次化表示方法,其可提高調(diào)試和問題診斷效率,并解決平層化文本表示大型語法樹不夠直觀、無法折疊展開的問題。
為了達(dá)成上述目的,本發(fā)明的解決方案是:
一種語法樹層次化表示方法,包括如下步驟:
步驟1,獲取語法樹輸出選項(xiàng),創(chuàng)建XML文件;
步驟2,基于深度優(yōu)先遍歷語法樹,每個語法樹節(jié)點(diǎn)對應(yīng)一個XML文件節(jié)點(diǎn),語法樹節(jié)點(diǎn)對應(yīng)的類名作為XML節(jié)點(diǎn)名稱,按照語法樹的父子、兄弟關(guān)系創(chuàng)建XML文件的節(jié)點(diǎn)結(jié)構(gòu);
步驟3,確定并輸出語法樹節(jié)點(diǎn)的信息:輸出各種節(jié)點(diǎn)類型對應(yīng)的數(shù)據(jù)屬性,按照屬性名、屬性值輸出到XML對應(yīng)的節(jié)點(diǎn)中,并輸出該節(jié)點(diǎn)對應(yīng)的源文件名、所在起始行號、起始列號、終止行號、終止列號;
步驟4,存儲語法樹對應(yīng)的XML文件。
上述步驟1中,針對IEC61131-3標(biāo)準(zhǔn)的結(jié)構(gòu)化文本ST語言、指令表IL語言,為各種類型的節(jié)點(diǎn)設(shè)計(jì)對應(yīng)的類。
上述步驟1中,針對IEC61131-3標(biāo)準(zhǔn)的結(jié)構(gòu)化文本ST語言、指令表IL語言,支持以配置、資源、任務(wù)、程序組織單元、函數(shù)、功能塊為組織單位,創(chuàng)建若干XML文件。
上述步驟3中,對于函數(shù)類型,輸出函數(shù)名、形參列表信息;對于語句類型,輸出語句關(guān)鍵字、表達(dá)式信息;對于簡單類型變量聲明,輸出變量類型、變量名字;對于復(fù)合結(jié)構(gòu)體類型變量聲明,輸出結(jié)構(gòu)體類型、名稱、各個子成員變量類型和名稱信息。
上述步驟4后,還包括如下步驟:讀取語法樹對應(yīng)的XML文件,并繪制語法樹的樹形結(jié)構(gòu),單擊/雙擊語法樹的節(jié)點(diǎn)時,根據(jù)記錄的文件名和行、列號信息,直接打開源文件,并加亮顯示對應(yīng)的字符區(qū)域。
采用上述方案后,本發(fā)明具有如下有益效果:
本發(fā)明提供了一種將語法樹的內(nèi)存結(jié)構(gòu)等價轉(zhuǎn)換為XML文件的表示方法,便于多人并行開發(fā)時,脫機(jī)查看和診斷。基于XML文件,可使用XML查看軟件,對于大型語法樹可分層打開和折疊。人機(jī)軟件可讀取XML文件,重構(gòu)語法樹,雙擊語法樹,可關(guān)聯(lián)打開源文件和顯示對應(yīng)的內(nèi)容,實(shí)現(xiàn)中間語法樹和源代碼的雙向追溯,提高了編譯器開發(fā)和測試的效率。
附圖說明
圖1是本發(fā)明中語法樹層次化表示原理圖;
圖2語法樹的部分?jǐn)?shù)據(jù)類名定義示例;
圖3是本發(fā)明中語法樹對應(yīng)XML內(nèi)容示例。
具體實(shí)施方式
以下將結(jié)合附圖,對本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說明。
如圖1所示,本發(fā)明提供一種基于IEC61131語言編譯器的可視化語法樹層次化表示方法,包括如下步驟:
步驟1,獲取語法樹輸出選項(xiàng),創(chuàng)建XML文件;
首先,形成語法樹:為形成抽象語法樹,針對IEC61131-3標(biāo)準(zhǔn)的結(jié)構(gòu)化文本ST語言、指令表IL語言,為各種類型的節(jié)點(diǎn)設(shè)計(jì)對應(yīng)的類,底層的類結(jié)構(gòu)如圖2所示,csymbol是基類,clist類是管理鏈表類,可派生出函數(shù)參數(shù)、語句鏈等具體類,ctoken類是具有屬性的終結(jié)符的基類,例如標(biāo)志符、常量等。基于flex進(jìn)行詞法分析,形成詞法單元序列。基于bison進(jìn)行語法分析,形成內(nèi)存的語法樹結(jié)構(gòu)。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于南京南瑞繼保電氣有限公司;南京南瑞繼保工程技術(shù)有限公司,未經(jīng)南京南瑞繼保電氣有限公司;南京南瑞繼保工程技術(shù)有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710200792.0/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 上一篇:一種按鈕事件處理方法和裝置
- 下一篇:一種信息處理方法及電子設(shè)備





