本發(fā)明主要涉及圖形化編程領(lǐng)域,具體涉及圖形化編程編譯方法。
背景技術(shù):
:著互聯(lián)網(wǎng)技術(shù)和社會(huì)不斷的發(fā)展,互聯(lián)網(wǎng)已經(jīng)與我們的生活息息相關(guān),深入到我們生活的各個(gè)方面。與此同時(shí)人們開始重視針對少年兒童的編程教育.在喬布斯生前接受的一次采訪中,他曾經(jīng)說過這樣一句話:這個(gè)國家的每一個(gè)人都應(yīng)該學(xué)習(xí)編程,因?yàn)樗棠闳绾嗡伎?同時(shí)比爾·蓋茨、馬克·扎克伯格、杰克·多西在內(nèi)的眾多名人,都來呼吁讓少年兒童參與到計(jì)算機(jī)編程中去.也許正是因?yàn)檫@種觀念的深入人心,科技巨頭們也都參與到針對少年兒童的編程教育中去。于是圖形化編程語言應(yīng)運(yùn)而生,其要求簡單,不需要復(fù)雜的語法知識(shí),小朋友只需要拖到模塊進(jìn)行自由組合,從而達(dá)到某種特定效果。圖形化編程它能夠最大程度地讓兒童發(fā)揮想象力和創(chuàng)造力,培養(yǎng)他們的基本編程邏輯和思維。目前市場上的圖形化編程的軟件基本都是每個(gè)圖形對象都是代碼塊,可以將它們拼接起來,創(chuàng)造出簡單功能,然后將一個(gè)個(gè)簡單功能組合起來,然后將其轉(zhuǎn)化成某種高級語言,比如python、javascript等高級語言,之后將代碼傳輸至控制器,由控制器中編譯器對目標(biāo)代碼進(jìn)行解析,其中包括預(yù)處理、編譯、匯編最終生成可執(zhí)行的機(jī)器語言。其編譯過程過于復(fù)雜,過于專業(yè),學(xué)習(xí)成本高,且對控制器要求高,無形中增加了軟件開發(fā)成本。且在某些具體環(huán)境下并不需要構(gòu)建復(fù)雜的編譯器來實(shí)現(xiàn)編譯工作,針對這種現(xiàn)狀進(jìn)而提出了一種簡單容易實(shí)現(xiàn)的圖形化編程的自動(dòng)編譯方法。技術(shù)實(shí)現(xiàn)要素:本發(fā)明針對當(dāng)前圖形化編程領(lǐng)域中的編譯技術(shù)過于復(fù)雜,要求過高,提供了一種簡單易實(shí)現(xiàn)的圖形化編程的自動(dòng)編譯方法。本發(fā)明的目的在于提供一種高效且簡單的編譯方法,通過該編譯方法自動(dòng)生成程序的在控制器可執(zhí)行文件,從而達(dá)到程序的運(yùn)行效果,具體技術(shù)方案如下:基于一種圖形化編程的自動(dòng)編譯方法,包括以下步驟:(a)用戶自由組合圖形化模塊生成圖形化程序;(b)圖形化程序內(nèi)存分配,生成圖形化程序內(nèi)存分配表,以實(shí)現(xiàn)對控制器的內(nèi)存管理和操作;(c)圖形化程序線程分配,對圖形化程序的存儲(chǔ)結(jié)構(gòu)進(jìn)行分析,得到圖形化程序的線程分配表,以達(dá)到圖形化程序多線程執(zhí)行,以實(shí)現(xiàn)線程管理;(d)圖形化程序解析模塊,根據(jù)圖形化程序的存儲(chǔ)結(jié)構(gòu),對圖形化程序中每個(gè)圖形化模塊所處位置進(jìn)行分析,得到圖形化模塊可能需要的額外指令,比如線程啟動(dòng)指令、條件跳轉(zhuǎn)指令;(e)圖形化程序可執(zhí)行文件生成模塊是整個(gè)編譯方法中關(guān)鍵的一環(huán),在(b)、(c)、(d)步驟的基礎(chǔ)上,生成圖形化程序中每個(gè)模塊對應(yīng)的字節(jié)數(shù)組,然后按照圖形化程序遍歷的順序?qū)D形化模塊的字節(jié)數(shù)組串接成一個(gè)完整可執(zhí)行文件;(f)通過hid或者藍(lán)牙數(shù)據(jù)通信,將(e)步驟生成的可執(zhí)行文件傳輸至控制器,控制器按照指令執(zhí)行相應(yīng)的動(dòng)作,以達(dá)到圖形化程序的預(yù)期動(dòng)作效果。上述的一種圖形化編程的自動(dòng)編譯方法中,步驟(b)包括以下步驟:(b-1)獲取圖形化程序的儲(chǔ)存結(jié)構(gòu)-森林;(b-2)遍歷圖形化程序?qū)?yīng)的樹結(jié)構(gòu),根據(jù)樹節(jié)點(diǎn)id獲取圖形化模塊實(shí)體;(b-3)根據(jù)圖形化模塊模式獲取對應(yīng)的參數(shù)內(nèi)存分配列表,其包含參數(shù)初始化的順序,以保證相關(guān)動(dòng)作能正確執(zhí)行;(b-4)根據(jù)參數(shù)類型,分配指定大小的內(nèi)存空間,然后記錄參數(shù)分配的內(nèi)存基址;(b-5)對特殊參數(shù),比如用戶自定義參數(shù)和資源型參數(shù)進(jìn)行額外處理,以保證滿足圖形化模塊的內(nèi)存要求和程序的健壯性;(b-6)最終生成圖形化程序內(nèi)存分配表,以實(shí)現(xiàn)對控制器內(nèi)存進(jìn)行管理和操作上述的一種圖形化編程的自動(dòng)編譯方法中,步驟(c)包括以下步驟:(c-1)獲取圖形化程序的儲(chǔ)存結(jié)構(gòu)-森林;(c-2)深度遍歷森林中的樹結(jié)構(gòu),如果節(jié)點(diǎn)是根節(jié)點(diǎn)則創(chuàng)建線程,且該線程為圖形化程序的主線程,并記錄線程信息,其包括線程id和線程起始模塊id;(c-3)若節(jié)點(diǎn)是非根節(jié)點(diǎn),則判斷父節(jié)點(diǎn)的子節(jié)點(diǎn)的個(gè)數(shù),如果該節(jié)點(diǎn)是父節(jié)點(diǎn)的第一個(gè)孩子,則不進(jìn)行任何操作,繼續(xù)遍歷;如果該節(jié)點(diǎn)不是父節(jié)點(diǎn)的第一孩子,則分配新線程,記錄線程信息;(c-4)若節(jié)點(diǎn)是葉子節(jié)點(diǎn),則表示該節(jié)點(diǎn)是線程的終止節(jié)點(diǎn),將該節(jié)點(diǎn)id作為線程結(jié)束id,注意圖形化程序包含的葉子節(jié)點(diǎn)等于圖形化程序包含的線程數(shù);(c-5)最終構(gòu)造出圖形化程序的線程分配表,以滿足對圖形化程序的多線程管理和操作。圖形化程序經(jīng)過(b)、(c)步驟處理后,得到圖形化程序的圖形化程序內(nèi)存分配表和圖形化程序線程分配表,在之后的(d)、(e)步驟中,會(huì)基于圖形化內(nèi)存分配表和圖形化程序線程分配表對圖形化程序進(jìn)行處理,最終生成圖形化程序?qū)?yīng)的可執(zhí)行文件。上述的一種圖形化編程的自動(dòng)編譯方法,步驟(e)包括以下步驟:(e-1)獲取圖形化程序存儲(chǔ)結(jié)構(gòu)-森林;(e-2)根據(jù)不同功能需求遍歷森林,功能主要包括圖形化程序整體下傳、圖形化程序部分下傳和圖形化樹下傳,然后根據(jù)具體要求深度遍歷森林中的樹:(e-3)根據(jù)樹節(jié)點(diǎn)id獲取對應(yīng)的圖形化模塊實(shí)體,根據(jù)圖形化模塊類型和模式調(diào)用其對應(yīng)的xml文件,在解析圖形化模塊模式對應(yīng)xml指令集中,需要借助指令解析xml文件來對圖形化模塊模式包含的指令集進(jìn)行解析和替換,以生成滿足具體功能的圖形化模塊字節(jié)數(shù)組;(e-4)在解析和替換圖形化模塊模式xml文件時(shí),并不能生成完整的圖形化模塊模式字節(jié)數(shù)組,可能會(huì)產(chǎn)生程序地址空缺,資源地址欠缺,一般先用零來填充程序地址,以形成半完整的圖形化模塊模式字節(jié)數(shù)組并記錄圖形化模塊的缺省信息,最終形成圖形化程序的rom(程序)地址缺省表;(e-5)根據(jù)遍歷順序,依次分配圖形化模塊的程序地址,根據(jù)生成的圖形化模塊字節(jié)數(shù)組的大小來決定圖形化模塊占據(jù)的rom存儲(chǔ)空間,最終生成圖形化程序的rom(程序)地址分配表(e-6)分配完圖形化模塊的程序地址之后,對圖形化程序需要的額外資源進(jìn)行分配,以滿足圖形化程序中圖形化模塊的資源需求,比如圖片、聲音和文本;(e-7)根據(jù)圖形化程序的rom地址缺省表和圖形化程序rom地址分配表,對步驟(c)生成半完整的圖形化模塊字節(jié)數(shù)組中的空缺rom地址進(jìn)行填充,以形成完整的圖形化模塊字節(jié)數(shù)組;(e-8)將生成的圖形化模塊字節(jié)數(shù)組和資源字節(jié)數(shù)組按照規(guī)則連接起來形成圖形化程序最終可執(zhí)行的字節(jié)數(shù)組,然后通過通信模塊將數(shù)據(jù)傳至控制器運(yùn)行。上述一種圖形化編程的自動(dòng)編譯方法,其特征在于,步驟(c-3)包括如下步驟:(e-3-1)根據(jù)樹節(jié)點(diǎn)id獲取對應(yīng)的圖形化模塊實(shí)體,進(jìn)而獲取圖形化模塊類型和模式;(e-3-2)根據(jù)圖形化模塊類型和模式值獲取相應(yīng)參數(shù)初始化列表,對有初始化值的參數(shù)進(jìn)行初始化操作,即對參數(shù)對應(yīng)的內(nèi)存地址賦予初值,以滿足模塊的功能需求;(e-3-3)根據(jù)圖形化模塊類型和模式值中獲取相應(yīng)的指令集,通過表達(dá)式對指令進(jìn)行解析和替換,首先根據(jù)指令碼獲取指令中每個(gè)操作數(shù)的含義,即獲取操作數(shù)的尋址方式;(e-3-4)指令中每個(gè)操作數(shù)都有不同的尋址方式,根據(jù)上述獲取操作數(shù)尋址方式,進(jìn)而得到操作數(shù)的真實(shí)數(shù)值,然后使用真實(shí)值來替換指令中的操作數(shù),以完成對指令的解析;(e-3-5)指令集經(jīng)過步驟(c)、(d)處理,形成滿足圖形化程序中的圖形化模塊的功能要求,在處理過程中可能存在空缺值,需要后續(xù)操作進(jìn)行填補(bǔ),最后形成完整的圖形化模塊對應(yīng)的字節(jié)數(shù)組。上述一種圖形化編程的自動(dòng)編譯方法,步驟(f)的主要作用是將軟件與控制器連接起來進(jìn)行數(shù)據(jù)交換,其主要包括hid和藍(lán)牙兩種通信方式,通過數(shù)據(jù)通信模塊將最終生成的程序程序機(jī)器語言傳至控制器進(jìn)行運(yùn)行,同時(shí)也通過控制器連接模塊實(shí)時(shí)監(jiān)控控制器的狀態(tài)以及程序運(yùn)行狀況,以保證程序正常運(yùn)行;與現(xiàn)有技術(shù)相比,本發(fā)明具有如下優(yōu)點(diǎn)和技術(shù)效果:現(xiàn)有的圖形化編程編譯方法,大都在遵循特定的編譯框架進(jìn)行編譯,編譯過程過于復(fù)雜,過于專業(yè),學(xué)習(xí)成本高,對控制器要求高,需要微型操作系統(tǒng)支持,且編譯系統(tǒng)本身效率不高,效果不佳。而且國內(nèi)的圖形化編程的編譯方法更是鳳毛麟角,十分缺乏。針對上述問題,本發(fā)明允許軟件開發(fā)人員在不需要了解晦澀難懂編譯原理、運(yùn)行時(shí)結(jié)構(gòu)、編譯系統(tǒng)原理的內(nèi)在關(guān)系等復(fù)雜知識(shí)點(diǎn)基礎(chǔ)上,就可以通過本發(fā)明提出的自動(dòng)編譯方法來將圖形化編程編寫的程序轉(zhuǎn)化成控制器可直接執(zhí)行文件,簡單高效,很大程度簡化了圖形化編程的編譯實(shí)現(xiàn)。附圖說明圖1為實(shí)施方式中一種圖形化編程的自動(dòng)編譯方法的流程圖。具體實(shí)施方式以下結(jié)合附圖對本發(fā)明的實(shí)施方式作進(jìn)一步說明,但本發(fā)明的實(shí)施不限于此。如圖1,基于一種圖形化編程的自動(dòng)編譯方法,主要流程包括以下步驟:(a)用戶自由組合圖形化模塊生成圖形化程序;(b)圖形化程序內(nèi)存分配,生成圖形化程序內(nèi)存分配表,以實(shí)現(xiàn)對控制器的內(nèi)存管理和操作;(c)圖形化程序線程分配,對圖形化程序的存儲(chǔ)結(jié)構(gòu)進(jìn)行分析,得到圖形化程序的線程分配表,以達(dá)到圖形化程序多線程執(zhí)行,以實(shí)現(xiàn)對線程管理;(d)圖形化程序解析模塊,根據(jù)圖形化程序的存儲(chǔ)結(jié)構(gòu),對圖形化程序中每個(gè)圖形化模塊所處位置進(jìn)行分析,得到圖形化模塊可能需要的額外指令,比如線程啟動(dòng)指令、條件跳轉(zhuǎn)指令;(e)圖形化程序可執(zhí)行文件生成模塊是整個(gè)編譯方法中關(guān)鍵的一環(huán),在(b)、(c)、(d)步驟的基礎(chǔ)上,生成圖形化程序中每個(gè)模塊對應(yīng)的字節(jié)數(shù)組,然后按照圖形化程序遍歷的順序?qū)D形化模塊的字節(jié)數(shù)組串接成一個(gè)完整可執(zhí)行文件;(f)通過hid或者藍(lán)牙數(shù)據(jù)通信,將(e)步驟生成的可執(zhí)行文件傳輸至控制器,控制器按照指令執(zhí)行相應(yīng)的動(dòng)作,以達(dá)到圖形化程序的預(yù)期動(dòng)作效果。步驟(b)包括以下步驟:(b-1)獲取圖形化程序的儲(chǔ)存結(jié)構(gòu)-森林;(b-2)遍歷圖形化程序?qū)?yīng)的樹結(jié)構(gòu),根據(jù)樹節(jié)點(diǎn)id獲取圖形化模塊實(shí)體;(b-3)根據(jù)圖形化模塊模式獲取對應(yīng)的參數(shù)內(nèi)存分配列表,其包含參數(shù)初始化的順序,以保證相關(guān)動(dòng)作能正確執(zhí)行;(b-4)根據(jù)參數(shù)類型,分配指定大小的內(nèi)存空間,然后記錄參數(shù)分配的內(nèi)存基址;(b-5)對特殊參數(shù),比如用戶自定義參數(shù)和資源型參數(shù)進(jìn)行額外處理,以保證滿足圖形化模塊的內(nèi)存要求和程序的健壯性;(b-6)最終生成圖形化程序內(nèi)存分配表,以實(shí)現(xiàn)對控制器內(nèi)存進(jìn)行管理和操作步驟(c)包括以下步驟:(c-1)獲取圖形化程序的儲(chǔ)存結(jié)構(gòu)-森林;(c-2)深度遍歷森林中的樹結(jié)構(gòu),如果節(jié)點(diǎn)是根節(jié)點(diǎn)則創(chuàng)建線程,且該線程為圖形化程序的主線程,并記錄線程信息,其包括線程id和線程起始模塊id;(c-3)若節(jié)點(diǎn)是非根節(jié)點(diǎn),則判斷父節(jié)點(diǎn)的子節(jié)點(diǎn)的個(gè)數(shù),如果該節(jié)點(diǎn)是父節(jié)點(diǎn)的第一個(gè)孩子,則不進(jìn)行任何操作,繼續(xù)遍歷;如果該節(jié)點(diǎn)不是父節(jié)點(diǎn)的第一孩子,則分配新線程,記錄線程信息;(c-4)若節(jié)點(diǎn)是葉子節(jié)點(diǎn),則表示該節(jié)點(diǎn)是線程的終止節(jié)點(diǎn),將該節(jié)點(diǎn)id作為線程結(jié)束id,注意圖形化程序包含的葉子節(jié)點(diǎn)等于圖形化程序包含的線程數(shù);(c-5)最終構(gòu)造出圖形化程序的線程分配表,以滿足對圖形化程序的多線程管理和操作。圖形化程序經(jīng)過(b)、(c)步驟處理后,得到圖形化程序的圖形化程序內(nèi)存分配表和圖形化程序線程分配表,如表1和表2所示,在之后的(d)、(e)步驟中,會(huì)基于圖形化內(nèi)存分配表和圖形化程序線程分配表對圖形化程序進(jìn)行處理,最終生成圖形化程序?qū)?yīng)的可執(zhí)行文件。表1圖形化程序內(nèi)存分配表格式模塊id參數(shù)id參數(shù)基址表2圖形化程序線程分配表格式線程id起始模塊id結(jié)束模塊id上述的一種圖形化編程的自動(dòng)編譯方法,步驟(e)包括以下步驟:(e-1)獲取圖形化程序存儲(chǔ)結(jié)構(gòu)-森林;(e-2)根據(jù)不同功能需求遍歷森林,功能主要包括圖形化程序整體下傳、圖形化程序部分下傳和圖形化樹下傳,然后根據(jù)具體要求深度遍歷森林中的樹:(e-3)根據(jù)樹節(jié)點(diǎn)id獲取對應(yīng)的圖形化模塊實(shí)體,根據(jù)圖形化模塊類型和模式調(diào)用其對應(yīng)的xml文件,在解析圖形化模塊模式對應(yīng)xml指令集中,需要借助指令解析xml文件來對圖形化模塊模式包含的指令集進(jìn)行解析和替換,以生成滿足具體功能的圖形化模塊字節(jié)數(shù)組;(e-4)在解析和替換圖形化模塊模式xml文件時(shí),并不能生成完整的圖形化模塊模式字節(jié)數(shù)組,可能會(huì)產(chǎn)生程序地址空缺,資源地址欠缺,一般先用零來填充程序地址,以形成半完整的圖形化模塊模式字節(jié)數(shù)組并記錄圖形化模塊的缺省信息,最終形成圖形化程序的rom(程序)地址缺省表;(e-5)根據(jù)遍歷順序,依次分配圖形化模塊的程序地址,根據(jù)生成的圖形化模塊字節(jié)數(shù)組的大小來決定圖形化模塊占據(jù)的rom存儲(chǔ)空間,最終生成圖形化程序的rom(程序)地址分配表(e-6)分配完圖形化模塊的程序地址之后,對圖形化程序需要的額外資源進(jìn)行分配,以滿足圖形化程序中圖形化模塊的資源需求,比如圖片、聲音和文本;(e-7)根據(jù)圖形化程序的rom地址缺省表和圖形化程序的rom地址分配表,對步驟(c)生成半完整的圖形化模塊字節(jié)數(shù)組中的空缺rom地址進(jìn)行填充,以形成完整的圖形化模塊字節(jié)數(shù)組;(e-8)將生成的圖形化模塊字節(jié)數(shù)組和資源字節(jié)數(shù)組按照規(guī)則連接起來形成圖形化程序最終可執(zhí)行的字節(jié)數(shù)組,然后通過通信模塊將數(shù)據(jù)傳至控制器運(yùn)行;圖形化程序經(jīng)過步驟(e)處理之后,生成圖形化程序半完整的可執(zhí)行文件,需要經(jīng)過一些額外的操作和處理,最終生成完整的可執(zhí)行文件。上述一種圖形化編程的自動(dòng)編譯方法,其特征在于,步驟(c-3)包括如下步驟:(e-3-1)根據(jù)樹節(jié)點(diǎn)id獲取對應(yīng)的圖形化模塊實(shí)體,進(jìn)而獲取圖形化模塊類型和模式;(e-3-2)根據(jù)圖形化模塊類型和模式值獲取相應(yīng)參數(shù)初始化列表,對有初始化值的參數(shù)進(jìn)行初始化操作,即對參數(shù)對應(yīng)的內(nèi)存地址賦予初值,以滿足模塊的功能需求;(e-3-3)根據(jù)圖形化模塊類型和模式值中獲取相應(yīng)的指令集,按照如下表達(dá)式對指令進(jìn)行解析和替換,首先根據(jù)指令碼(order_code)獲取指令中每個(gè)操作數(shù)(operand)的含義(order_oprandmode(x1,x2…,xn)),即獲取操作數(shù)的尋址方式addressing_mode,以下作為實(shí)例,僅供編程人員參考,無需贅述具體含義:order_operandmode(x1,x2…,xn)=get_ordertype(order_code)(7-1)(e-3-4)指令中每個(gè)操作數(shù)都有不同的尋址方式,根據(jù)上述表達(dá)式獲取操作數(shù)尋址方式,進(jìn)而得到操作數(shù)的真實(shí)數(shù)值,然后使用真實(shí)值來替換指令中的操作數(shù),以完成對指令的解析:(e-3-5)指令集經(jīng)過步驟(c)、(d)處理,形成滿足圖形化程序中的圖形化模塊的功能要求,在處理過程中可能存在空缺值,需要后續(xù)操作進(jìn)行填補(bǔ),最后形成完整的圖形化模塊對應(yīng)的字節(jié)數(shù)組。當(dāng)前第1頁12